我可能在某个地方犯了个愚蠢的错误。我将感谢你在以下方面的帮助。
我有一个示例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);
}
如果我将textboxfor替换为textbox或displaytextfor,则它可以正常工作。
最佳答案
我相信在设置新值之前,必须在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);
}