价值观;“一些价值”;asp.net模型绑定验证无效
控制器:价值观;“一些价值”;asp.net模型绑定验证无效,asp.net,asp.net-mvc-2,Asp.net,Asp.net Mvc 2,控制器: public ActionResult EditTest() { return View(new EditTestViewModel("Is this a test?")); } [AcceptVerbs(HttpVerbs.Post)] public ActionResult EditTest(EditTestViewModel test) { return View(new EditTestViewM
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;
}
}
视图:
模型试验)%>
模型试验)%>
单击“保存”时的结果(无论是否编辑数据):
值“这是测试吗?”为
无效
发生了什么事?当您运行此代码并提交表单时,会遇到以下第一个异常:
[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);
}
是的,关于第一点你是对的。第二点——这只是一个测试,没有意义。但错误的实际原因是控制器参数名称与类变量名称相同,这会混淆绑定器+你在开玩笑吗?经过一整天的调试,搜索网络,清理项目,解决办法就是活页夹被弄糊涂了。活页夹弄糊涂了?这是真的。所以在我脑子里燃烧这个,“宾得很困惑,宾得很困惑,宾得很困惑。。。。
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditTest(EditTestViewModel test)
{
model.test = "new value";
ModelState.Remove("test");
return View(model);
}