5

在许多情况下,我遇到了一个问题,即我在服务器上创建了一个模型,该模型是由于回发的值而创建的。在处理模型时,一些模型值会发生变化,然后重新显示在页面上。是否有一些简单的方法可以覆盖导致 MVC 框架使用 POSTed 值而不是我的模型值的行为。

例子:

模型

public class MyModel {
    public string Value1 { get; set; }
}

控制器

public MyController : Controller {
    public ActionResult MyAction() {
        var model = new MyModel();
        model.Value1 = "OldValue";
        return View(model);
    }
    [HttpPost]
    public ActionResult MyAction(MyModel model) {
        model.Value1 = "NewValue";
        return View(model);
    }
}

看法

@using(Html.BeginForm("MyAction", "My", FormMethod.Post) {
    @Html.TextBoxFor(m => m.Value1)
    <input type="submit"/>
}

首次加载此页面时,文本框将包含“OldValue”。单击提交后,文本框仍然包含“OldValue”,因为这是回传到服务器的内容,但我希望它使用模型(NewValue)中的值创建第二个页面(在 POST 之后)。

有没有一种简单的方法来告诉 MVC 以这种方式行事?我不确定在这种情况下我应该怎么做才能得到我想要的结果。

注意 - 这都是伪代码,所以我可能有一些错误,但这个概念应该存在。

4

2 回答 2

8

在您的帖子重定向中(帖子 - 重定向 - 获取模式)。

[HttpPost]
public ActionResult MyAction(MyModel model) {
    model.Value1 = "NewValue";
    return RedirectToAction("MyAction");
}

编辑

清除模型状态以传回已编辑的模型

    [HttpPost]
    public ActionResult MyAction(MyModel model)
    {
        var newModel = new MyModel();
        newModel = model;
        ModelState.Clear();
        newModel.Value1 = "NewValue";
        return View(newModel);
    }
于 2012-08-31T19:45:58.707 回答
0

没有办法使用内置的助手来做到这一点。你必须手动完成

使用助手获取名称:

<input type="text" name="@Html.NameFor(m => m.MyField)" value="@Model.MyField"/>
于 2013-07-18T09:47:44.627 回答