【发布时间】:2015-11-10 13:37:43
【问题描述】:
我正在尝试创建一个表单,在其中编辑用户帐户并在其中使用 Chosen 插件添加角色。为此,我创建了一个视图模型:
public class UserAccountViewModel
{
public UserAccount UserAccount { get; set; }
public MultiSelectList RolesSelectList { get; set; }
public UserAccountViewModel() { }
public UserAccountViewModel(UserAccount userAccount, List<RolesAccount> AllRoles)
{
UserAccount = userAccount;
RolesSelectList = new MultiSelectList(AllRoles, "Id", "Name", UserAccount.Roles.Select(r=>r.Id).ToList());
}
} // class UserAccountViewModel
其中 UserAccount 包含 ID、用户名、密码等信息以及名为 Roles 的导航属性。
// Most of the members are stripped for clarity
public class UserAccount
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id{ get; set; }
public string Username{ get; set; }
public string Email{ get; set; }
public string Password{ get; set; }
public virtual ICollection<RolesAccount> Roles { get; set; }
} // end class UserAccount
在编辑表单(剃刀)中,我有如下代码(大部分字段已被我删除):
@model LoginModule.UserAccountViewModel
...
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>UserAccount</h4>
<hr />
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.UserAccount.Id)
<div class="form-group">
@Html.LabelFor(model => model.UserAccount.Username, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.UserAccount.Username)
@Html.ValidationMessageFor(model => model.UserAccount.Username)
</div>
</div>
<div class="form-group">
@Html.Label("Roles", new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.ListBox("RolesOfUser",
Model.RolesSelectList,
new
{
@class = "chzn-select",
data_placeholder = "Choose roles...",
style = "width:350px;"
})
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</div>
</div>
}
我遇到的问题是,当我单击提交时,控制器收到一个空参数。
public ActionResult Edit(UserAccountViewModel useraccount)
我认为我没有正确理解绑定机制。到目前为止,我的经验是模型是自动填充的,但在这种情况下,有些东西搞砸了。
为什么我收到一个空参数?有人可以指出我正确的方向吗?我读了很多文章,但我无处可去。
如何获取我正在查找的数据,在这种情况下由 UserAccount 类表示,包括角色?我可以使用其他方式检索数据,但我更喜欢使用 Chosen 插件。
【问题讨论】:
-
public ActionResult Edit([FromBody] UserAccountViewModel useraccount) -
您是否在 Get Action 方法中将您的模型传递给您的视图?
-
@Moe,我正在使用 Post 方法。
-
@Chet,我试过了,但我不能使用 FromBody。谢谢。
-
你不能是什么意思?是给出编译错误,还是添加它并不能解决您的问题?
标签: c# asp.net-mvc razor-2