在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; }
}
我这样做不正确吗?
答案 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"})
或强>
您可以将视图模型更新为具有这些属性的平坦视图模型。