当我通过单击保存按钮发布表单时,它会命中post方法,但模型参数始终为null。
控制器:
[HttpPost]
public ActionResult Edit(QuestionMaster question)
{
if (questionLogic.Update(model))
{
return RedirectToAction("List");
}
return View();
}
查看:
@using (Html.BeginForm()) {
<fieldset>
<legend>QuestionMaster</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Question)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Question)
@Html.ValidationMessageFor(model => model.Question)
</div>
</fieldset>
<p><input type="submit" value="Save" /></p>
}
答案 0 :(得分:3)
您尚未发布QuestionMaster
的模型,但是从视图代码中可以看到它包含名为Question
的属性,其类型为string
。问题是你的POST方法参数也被命名为question
,导致模型绑定失败,对象为空。
将参数重命名为模型中属性的名称,例如
[HttpPost]
public ActionResult Edit(QuestionMaster model)
你的模型在回发上null
的原因是因为模型绑定的工作原理
DefaultModelBinder
初始化一个新实例
QuestionMaster
Question="The text you entered"
model binder找到名为question
的参数(即匹配)和
将其设置为"The text you entered"
,但question
是typeof
QuestionMaster
(一个复杂的对象,而不是string
)因此绑定失败
并且模型变为空。答案 1 :(得分:1)
在HtmlFieldPrefix
中传递EditorFor
。
@Html.EditorFor(model => model.Question, new ViewDataDictionary() { TemplateInfo = new TemplateInfo { HtmlFieldPrefix = "QuestionMaster" }})
这样,字段的名称将是正确的,模型绑定器将能够绑定它们。
答案 2 :(得分:0)
根据您上面给出的代码,您的视图缺少模型。
您可以将模型添加到视图中,如下所示:
@model QuestionMaster
此代码通常是您视图中的第一行。
除此之外,你能解释控制器动作中model
的范围吗? model
在哪里定义?如果未定义,您应该了解在视图中使用@Model.someValue
很好,但是除非您的已发布模型参数被称为model
,否则访问控制器中的model
将不起作用。
假设这可能是表单“null”的另一个原因,请尝试将控制器更改为:
[HttpPost]
public ActionResult Edit(QuestionMaster question)
{
if (questionLogic.Update(question))
{
return RedirectToAction("List");
}
return View();
}
答案 3 :(得分:0)
您可以按照漩涡告诉您的方式进行操作,或者只是将参数名称更改为除“问题”之外的任何内容
[HttpPost]
public ActionResult Edit(QuestionMaster question2)
或
[HttpPost]
public ActionResult Edit(QuestionMaster model)
或
[HttpPost]
public ActionResult Edit(QuestionMaster anything)