如何将自定义字段添加到Json结果-ASP.NET MVC

How to Add Custom Fields to a Json Result - ASP.NET MVC

本文关键字:结果 Json -ASP NET MVC 添加 自定义 字段      更新时间:2023-09-26

我正在开发一个能够编辑注册用户信息的管理页面。当我从下拉列表中选择一个用户时,用户的当前信息正在填充以编辑字段。我用Javascript和Json制作的。

到目前为止,这是我的JS代码:

$(document).ready(function () {
        $("#UserId").change(function () {
            if ($(this).val() != "" && $(this).val() != undefined && $(this).val() != null) {
                $.ajax({
                    type: "POST",
                    url: "/AdminController/GetUserData",
                    cache: false,
                    data: { userid: $(this).val() },
                    success: function (result) {                         
                        $("#EMailAdress").val(result.EMailAdress)
                        $("#UserName").val(result.UserName)
                    }
                });
            }
            else {
                $("#UserName").val("");
                $("#EMailAdress").val("");
            }
        });
    });

正如你所看到的,我正在触发"/AdminController/GetUserData",我有下面的代码:

[HttpPost]
    public JsonResult GetUserData()
    {
        int userid = Convert.ToInt32(Request.Form["userid"]);
        MyContext _db = new MyContext();
        var userObj = _db.Users.SingleOrDefault(p => p.UserId == userid);
        return Json(userObj);
    }

现在我必须在同一页面中显示所选用户的当前角色。我可以在我的控制器中访问该角色数据。但我找不到将其添加到JsonResult中的方法。我认为我可以用另一个JS代码触发另一个控制器方法,为用户获取角色数据,但我认为这不是一个好方法。

我是一个发明家,所以如果解决方案很容易,请不要责怪我。。。我希望我说清楚了。如有任何帮助,我们将不胜感激。

您可以定义一个视图模型:

public class MyViewModel
{
    public User User { get; set; }
    public RoleData Role { get; set; }
}

您的控制器操作将填充:

[HttpPost]
public ActionResult GetUserData(int userId)
{
    MyContext _db = new MyContext();
    var userObj = _db.Users.SingleOrDefault(p => p.UserId == userId);
    var roleData = .....
    var model = new MyViewModel();
    model.User = userObj;
    model.Role = roleData;
    return Json(model);
}

请注意控制器操作是如何将userId作为参数的,以避免您编写从请求中解析它的管道代码。这已经由默认的模型绑定器处理了。

在AJAX成功回调中,您可以访问我们定义的视图模型的两个属性(分别为UserRole):

success: function (result) {                         
    $("#EMailAdress").val(result.User.EMailAdress);
    $("#UserName").val(result.User.UserName);
    var roleData = result.Role;
    // do something here with the role data
}