Html.EditorFor发布后不更新

时间:2018-09-19 14:47:20

标签: c# .net asp.net-mvc

我做的事情根本上是错的。我创建了一个简单的问题示例。

我有一个简单的类,如下:

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" />
}

当我第一次访问页面时,标题和文本框的值相同

enter image description here

我按提交,然后页面再次加载。标题已更新,但文本框具有相同的值。

enter image description here

为什么@Html.EditorFor(model => model.Text);没有得到更新的值?

2 个答案:

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