我做的事情根本上是错的。我创建了一个简单的问题示例。
我有一个简单的类,如下:
public class Example
{
public string Text { get; set; }
}
我在控制器上创建了两个方法
这是您点击的视图页面。它将创建一个新的Example
对象。
public ActionResult Example()
{
var model = new Example {
Text = "test"
};
return View(model);
}
然后在提交表单后回发
[HttpPost, ValidateAntiForgeryToken]
public ActionResult Example(Example model)
{
model.Text += "a";
return View(model);
}
视图如下:
@model Stackoverflow.Example
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<h1>@Model.Text</h1>
@Html.EditorFor(model => model.Text);
<input type="submit" value="Save" />
}
当我第一次访问页面时,标题和文本框的值相同
我按提交,然后页面再次加载。标题已更新,但文本框具有相同的值。
为什么@Html.EditorFor(model => model.Text);
没有得到更新的值?
答案 0 :(得分:1)
您需要在控制器的post方法上清除模型状态
[HttpPost, ValidateAntiForgeryToken]
public ActionResult Example(Example model)
{
ModelState.Clear();
model.Text += "a";
return View(model);
}
答案 1 :(得分:1)
将模型发布回ActionResult
并返回相同的View
时,模型对象的值包含在ModelState
中。 ModelState
包含有关有效/无效字段以及实际POSTed
值的信息。如果要更新模型值,可以执行以下两项操作之一:
[HttpPost, ValidateAntiForgeryToken]
public ActionResult Example(Example model)
{
ModelState.Clear();
model.Text += "a";
return View(model);
}
或
[HttpPost, ValidateAntiForgeryToken]
public ActionResult Example(Example model)
{
var newValue = model.Text += "a";
ModelState["Text"].Value = new ValueProviderResult(newValue,newValue, CultureInfo.CurrentCulture)
return View(model);
}