我有这样的观点:
@model MVCApp.Models.User
@{
ViewBag.Title = "EditUser";
}
<h2>Edycja użytkownika</h2>
@using (Ajax.BeginForm("SaveUser", "My", new AjaxOptions { UpdateTargetId = "Result" }))
{
<fieldset>
<legend>Zmień dane użytkownika</legend>
<div id="EditUserForm">
<div>
@Html.LabelFor(m => Model.Login)
@Html.TextBoxFor(m => Model.Login)
</div>
<div>
@Html.LabelFor(m => Model.Password)
@Html.TextBoxFor(m => Model.Password)
</div>
<div>
@Html.LabelFor(m => Model.Name)
@Html.TextBoxFor(m => Model.Name)
</div>
<div>
@Html.LabelFor(m => Model.Surname)
@Html.TextBoxFor(m => Model.Surname)
</div>
<div>
@Html.LabelFor(m => Model.UserRole.Role)
@Html.TextBoxFor(m => Model.UserRole.Role)
</div>
<input type="submit" value="Zapisz zmiany" />
@Html.HiddenFor(m => Model.UserRole)
@Html.HiddenFor(m => Model.UserRoleID)
@Html.HiddenFor(m => Model.UserID)
</div>
</fieldset>
<div id="Result"></div>
@Html.ValidationSummary(true)
}
MyController中的和方法如下:
[HttpPost]
public ActionResult SaveUser(User user, UserRole role)
{
//code here
}
但是没有传递对象角色,user.UserRole。
我的用户模型类:
namespace MVCApp.Models
{
public partial class User
{
public User()
{
this.Factures = new HashSet<Facture>();
this.Settings = new HashSet<Setting>();
this.Companies = new HashSet<Company>();
}
public int UserID { get; set; }
public Nullable<int> UserRoleID { get; set; }
public string Login { get; set; }
public string Password { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public virtual ICollection<Facture> Factures { get; set; }
public virtual ICollection<Setting> Settings { get; set; }
public virtual UserRole UserRole { get; set; }
public virtual ICollection<Company> Companies { get; set; }
}
}
角色模型类:
namespace MVCApp.Models
{
public partial class UserRole
{
public UserRole()
{
this.Users = new HashSet<User>();
}
public int UserRoleID { get; set; }
public string Role { get; set; }
public virtual ICollection<User> Users { get; set; }
}
}
那么,我怎样才能传递这样的模型,其中包含其他引用类型?
答案 0 :(得分:1)
视图中的以下行没有意义
@Html.HiddenFor(m => Model.UserRole)
UserRole
是一个复杂的对象,根据您是否覆盖了其.ToString()
方法,它会呈现<input ... value="MVCApp.Models.UserRole" />
所以当这个帖子发回时,DefaultModelBinder
正在尝试当然model.UserRole = "MVCApp.Models.UserRole"
失败,因此属性为null
删除它,然后绑定到您想要发回的UserRole
属性 - 就像使用@Html.TextBoxFor(m => Model.UserRole.Role)
一样。例如@Html.HiddenFor(m => Model.UserRole.UserRoleID)
,但您似乎已经将其与@Html.HiddenFor(m => Model.UserRoleID)
绑定在一起,因此重复它可能不是必需的。
答案 1 :(得分:0)
您可以创建自己的提交机制。只需使用$.ajax
并将所有值传递给其data属性即可。多一点js代码,但更灵活。