控制器:
public ActionResult EditTest()
{
return View(new EditTestViewModel("Is this a test?"));
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditTest(EditTestViewModel test)
{
return View(new EditTestViewModel("Is this a test?"));
}
视图模型:
public class EditTestViewModel
{
public String test { get; set; }
public EditTestViewModel(String test)
{
this.test = test;
}
}
查看:
<% using (Html.BeginForm("EditTest", "Test", FormMethod.Post)) {%>
<%= Html.ValidationSummary(true) %>
<%= Html.TextBoxFor(model => model.test) %>
<%= Html.ValidationMessageFor(model => model.test) %>
<input type="submit" value="Save" />
<% } %>
单击“保存”(无论是否编辑数据)时的结果:
值“这是一个测试吗?”是 无效。
发生了什么事?
答案 0 :(得分:0)
运行此代码并提交表单时,您将获得以下第一个例外:
[MissingMethodException: No parameterless constructor defined for this object.]
那是因为EditTestViewModel
没有无参数构造函数,你不能像这样使用它。
您的代码的第二个问题是您在POST操作中创建了一个新对象,而不是重用作为参数传递的对象。
所以这是如何修复:
查看型号:
public class EditTestViewModel
{
public String test { get; set; }
}
控制器:
public ActionResult EditTest()
{
var model = new EditTestViewModel
{
test = "Is this a test?"
}
return View(model);
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditTest(EditTestViewModel test)
{
return View(model);
}
如果由于某种原因你想编辑POST操作中的值,并且要反映在视图中,则需要将其从模型状态中删除,否则HTML帮助程序将选择旧值:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditTest(EditTestViewModel test)
{
model.test = "new value";
ModelState.Remove("test");
return View(model);
}