【问题标题】:Html.BeginForm sends a null parameter to the relevant action (MVC 5)Html.BeginForm 向相关操作发送一个空参数(MVC 5)
【发布时间】: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


【解决方案1】:

在解决此问题三天后,由于与此问题无关的原因,我开始在另一台 PC 上工作,一切又开始工作了。就 Visual Studio 版本和使用的分支而言,两台 PC 之间没有区别。在另一个控制器上进行一些代码更改后,回到最初的 PC,程序也开始在那里工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 2017-03-05
    • 1970-01-01
    相关资源
    最近更新 更多