【问题标题】:MVC3: How to force Html.TextBoxFor to use the model value rather than the POSTed valueMVC3:如何强制 Html.TextBoxFor 使用模型值而不是 POSTed 值
【发布时间】:2012-08-31 19:44:02
【问题描述】:

在许多情况下,我都遇到了一个问题,即我在服务器上创建了一个模型,该模型是回传值的结果。在处理模型时,一些模型值会发生变化,然后重新显示在页面上。是否有一些简单的方法可以覆盖导致 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”,因为这是 POST 回服务器的内容,但我希望它使用模型 (NewValue) 中的值创建第二个页面(在 POST 之后)。

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

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

【问题讨论】:

    标签: asp.net asp.net-mvc-3


    【解决方案1】:

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

    [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);
        }
    

    【讨论】:

    • 感谢您的建议,但我的示例已简化,我真的不想只重定向到 GET。我想我可以完成这项工作,但我希望有一个解决方案可以让模型覆盖 POST 的值。
    • @LeslieHanks - 很抱歉造成误解,请参阅我的编辑。
    • 很好的答案。这正是我所需要的。谢谢!
    【解决方案2】:

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

    使用助手获取名称:

    <input type="text" name="@Html.NameFor(m => m.MyField)" value="@Model.MyField"/>
    

    【讨论】:

      猜你喜欢
      • 2012-03-10
      • 2011-09-18
      • 2013-10-26
      • 2011-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      相关资源
      最近更新 更多