我正在开发一个能够编辑注册用户信息的管理页面。当我从下拉列表中选择用户时,将填充用户的当前信息以编辑字段。我用 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);
}
现在我必须在同一页面中显示所选用户的当前 Angular 色。 我可以在我的 Controller 中访问该 Angular 色数据。但我找不到将其添加到我的 JsonResult 中的方法。我认为我可以触发另一个 Controller 方法,使用另一个 JS 代码获取用户的 Angular 色数据,但我认为这不是一个好方法。
我是初学者,所以如果解决方案很简单,请不要责怪我...... 我希望我说清楚了。 任何帮助将不胜感激。
最佳答案
您可以定义 View 模型:
public class MyViewModel
{
public User User { get; set; }
public RoleData Role { get; set; }
}
您的 Controller 操作将填充:
[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);
}
请注意 Controller 操作如何将 userId 作为参数,以避免您编写从请求中解析它的管道代码。这已经由默认模型绑定(bind)器处理。
在 AJAX 成功回调中,您可以访问我们定义的 View 模型的 2 个属性(分别为 User
和 Role
):
success: function (result) {
$("#EMailAdress").val(result.User.EMailAdress);
$("#UserName").val(result.User.UserName);
var roleData = result.Role;
// do something here with the role data
}
关于javascript - 如何向 Json 结果添加自定义字段 - ASP.NET MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20090725/