控制器动作方法中的模型为空

时间:2016-12-12 18:13:47

标签: asp.net-mvc

在MVC视图中我有这个表单

@model SalesForceWeb.Models.UserViewModel

@using (Html.BeginForm("Configure", "Home")) {
    @Html.LabelFor(model => model.user.EmailAddress)
    @Html.TextBoxFor(model => model.user.EmailAddress)
    @Html.LabelFor(model => model.user.Password)
    @Html.PasswordFor(model => model.user.Password)
    @Html.LabelFor(model => model.user.SecurityToken)
    @Html.TextBoxFor(model => model.user.SecurityToken)
    <p><input type="submit" id="setupSalesforce" value="Save" /></p>
}

在我的控制器中,这是我的动作结果方法。

[HttpPost]
public ActionResult Configure(Models.SalesforceUserModel model)
{
    model.UserID = new Guid();
    model.CreatedDate = DateTime.UtcNow;
    // snip, save to database

    return View();
}

但参数模型为null /它的字段为空。

这是模型

public class SalesforceUserModel
{

    public int AccountEventID { get; set; }
    public Guid UserID { get; set; }

    [DisplayName("Email Address")]
    public string EmailAddress { get; set; }
    public string Password { get; set; }
    [DisplayName("Security Token")]
    public string SecurityToken { get; set; }
    public DateTime CreatedDate { get; set; }

}

我这样做不正确吗?

1 个答案:

答案 0 :(得分:0)

您当前的视图代码为输入生成如下所示的HTML标记

<input id="user_EmailAddress" name="user.EmailAddress" type="text" value="">

但是您的HttpPost操作方法参数是SalesforceUserModel类型,其中EmailAddress属性直接存在于其中(不是深层)。因此,对于模型绑定工作,您应该生成像这样的标记

<input name="EmailAddress" type="text" value="">

为此,您可以明确指定输入元素所需的名称。

@Html.TextBoxFor(f => f.user.EmailAddress,new {NAME="EmailAddress"})

您可以将视图模型更新为具有这些属性的平坦视图模型。