Asp.net mvc 4 提交后模型为空
我想知道为什么ContactController中的ContactModel没有填写表单中提供的值。我的头在哪里爆炸了 按原样编码: HomeController(联系人表单所在位置) 家庭视图模型Asp.net mvc 4 提交后模型为空,asp.net-mvc-4,Asp.net Mvc 4,我想知道为什么ContactController中的ContactModel没有填写表单中提供的值。我的头在哪里爆炸了 按原样编码: HomeController(联系人表单所在位置) 家庭视图模型 public class HomeViewModel { public ContactModel ContactModel { get; set; } } 用于保存值的ContactModel public class HomeController : Controller { p
public class HomeViewModel
{
public ContactModel ContactModel { get; set; }
}
用于保存值的ContactModel
public class HomeController : Controller
{
public ActionResult Index()
{
var viewModel = new HomeViewModel();
return View(viewModel);
}
}
public class ContactModel
{
[Required(ErrorMessage = "Required")]
public String Name { get; set; }
[EmailAddress]
[Required(ErrorMessage = "Required")]
public String Email { get; set; }
[Required(ErrorMessage = "Required")]
public String Message { get; set; }
}
HomeController的索引视图
@model MyNameSpace.ViewModels.HomeViewModel
@using (Html.BeginForm("Send", "Contact", FormMethod.Post))
{
<div class="form-group">
@Html.LabelFor(model => model.ContactModel.Name, "Name", new { @class = "sr-only" })
@Html.TextBoxFor(model => model.ContactModel.Name, new { @class = "form-control", @placeholder = "Name" })
</div>
<div class="form-group">
@Html.LabelFor(model => model.ContactModel.Email, "E-mail", new { @class = "sr-only" })
@Html.TextBoxFor(model => model.ContactModel.Email, new { @class = "form-control", @placeholder = "E-mail" })
</div>
<div class="form-group">
@Html.LabelFor(model => model.ContactModel.Email, "Message", new { @class = "sr-only" })
@Html.TextAreaFor(model => model.ContactModel.Message, new { @class = "form-control", @placeholder = "Message" })
</div>
<p><button type="submit" class="btn btn-default">Send</button></p>
}
由于我的表单提交中的某些原因,在
ContactController.Send(ContactModel model)
中提供的模型具有所有空值-链接在哪里断开?您的POST操作应将视图模型作为参数,而不是域模型:
[HttpPost]
public ActionResult Send(HomeViewModel model)
原因很简单——这是默认模型绑定器的工作方式。视图中的输入字段都以ContactModel
为前缀
或者,您可以使用Bind
属性并明确指定:
[HttpPost]
public ActionResult Send([Bind(Prefix = "ContactModel")] ContactModel model)
因此,如果我希望从多个位置使用ContactController.Send(ContactModel模型),那么这是最好的设计,我会将其移动到某个帮助器类或什么是好的设计?在这种情况下,我看不到您在视图中使用的
HomeViewModel
类有多大好处。它所做的只是将您的域模型包装在一个属性中,而不是视图模型应该如何工作。
[HttpPost]
public ActionResult Send([Bind(Prefix = "ContactModel")] ContactModel model)