遇到一个奇怪的问题,其中我的模型没有绑定并显示在控制器上为空。参数的名称是否必须是模型?
我有一个表单做一个httppost。我的控制器中的断点被击中,我期望成为我的模型的参数为空。
查看另一个工作页面上的一些示例代码,我复制并粘贴它,唯一的区别是参数的名称是'model'而不是消息。
查看
@model Site.Models.ContactMessage
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>ContactMessage</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.Message, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Message, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Message, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.To, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.To, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.To, "", new { @class = "text-danger" })
</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>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
控制器
public ActionResult Contact()
{
return View();
}
[HttpPost]
public ActionResult Contact(ContactMessage message)
{
var m = message;
return View();
}
和它的工作。我以为我一定完全错过了命名约定。发现你可以使用绑定,从阅读一堆其他职位,改变像前缀;
public ActionResult Contact([Bind(Prefix = "model")] ContactMessage message)
但是没有工作,仍然是空的。要将其重命名为模型,以便它可以工作,我可以继续前进,但想知道为什么它不具有约束力(如果不叫做模型)。
public ActionResult Contact(ContactMessage message)
回到上面的样子,但仍然返回null。有趣的是,如果我打开另一个MVC应用程序,该应用程序具有任何我想要的参数名称并且工作正常。它使用的是MVC 5的旧版本(尚未更新,但我会这样做,看看是否会发生任何事情,但我不期望它会发生。)
我试着创建一个ContactMessage的实例,设置字段并将其传递给视图。它按照我的预期填充了该领域。除非变量的名称是model,否则更改值并提交仍然返回null。 –