邮政后MVC 2问题填充文本框

时间:2011-08-10 09:10:04

标签: asp.net-mvc asp.net-mvc-2

我在MVC2应用程序中有以下操作:

    public ActionResult Index()
    {
        return View(new TestModel() { MyValue = "ValueBeforePost" });
    }

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Index(TestModel m)
    {
        m.MyValue = "ValueSetInPost";
        return View(m);
    }

在我的视图中我有

<% using (MvcForm f = Html.BeginForm("Index", "Home")) %>
<% { %>
    <%= Html.TextBoxFor(m => Model.MyValue) %>
    <input type="submit" value="Submit" />
<% } %>

在帖子之后,我的文本框中的值没有填充我在我的操作中设置的新值(m.MyValue =“ValueSetInPost”),它似乎是从Request中保存的值中填充的。表格(在这种情况下为Request.Form [“MyValue”,即“ValueBeforePost”]。

如何更改帖子中的值?

2 个答案:

答案 0 :(得分:1)

您需要操纵ModelState才能生效。有一个related question有更多细节。

文本框助手将使用模型状态中的AttemptedValue来重新填充文本框,并使用发布到控制器的值。实际效果是,ModelState中的数据将覆盖您在后期操作中传递给视图的模型中的任何内容。

答案 1 :(得分:1)

您需要删除要修改它的ModelState中的值,否则Html帮助程序将使用原始POSTed值:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(TestModel m)
{
    ModelState.Remove("MyValue");
    m.MyValue = "ValueSetInPost";
    return View(m);
}