我可能在某个地方犯了一个愚蠢的错误。我将非常感谢您的帮助 我有一个带有单个可编辑字段的MVC3应用程序示例,该字段使用TextBoxFor方法显示给用户。在索引(POST)操作中,我更改了值,但它仍然保持不变。我究竟做错了什么?
我的代码:
型号:
public class TestModel
{
public string Name { get; set; }
}
查看:
using (Html.BeginForm())
{
@Html.TextBoxFor(m => m.Name)
<input type="submit" />
}
控制器:
public ActionResult Index()
{
return View("Index", new TestModel() { Name = "Before post" });
}
[HttpPost]
public ActionResult Index(TestModel model)
{
model.Name = "After post";
return View("Index", model);
}
如果我用TextBox或DisplayTextFor替换TextBoxFor,那么它可以正常工作。
答案 0 :(得分:12)
我相信在设置新值之前,您必须在ModelState.Clear()
操作中调用[HttpPost]
。
根据这个答案,有一个非常好的解释:How to update the textbox value @Html.TextBoxFor(m => m.MvcGridModel.Rows[j].Id)
也是这样:ASP.NET MVC 3 Ajax.BeginForm and Html.TextBoxFor does not reflect changes done on the server
虽然您似乎没有使用Ajax.BeginForm
,但行为是相同的。
包括@Scheien建议的一个例子:
[HttpPost]
public ActionResult Index(TestModel model)
{
ModelState.Clear();
model.Name = "After post";
return View("Index", model);
}