值“some value”是无效的asp.net模型绑定验证

时间:2011-07-09 05:29:45

标签: 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 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" />
<% } %>

单击“保存”(无论是否编辑数据)时的结果:

  

值“这是一个测试吗?”是   无效。

发生了什么事?

1 个答案:

答案 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);
}