2012-08-31 31 views
5

在很多情况下,我遇到了一个问题,我在服务器上创建了一个模型,作为返回值的结果。在处理模型时,一些模型值将被更改,然后在页面上重新显示。是否有一些简单的方法来覆盖导致MVC框架使用POSTed值而不是我的模型值的行为。MVC3:如何强制Html.TextBoxFor使用模型值而不是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这样表现?我不确定我在这种情况下应该做什么来获得我想要的结果。

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

回答

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); 
    } 
+0

感谢您的建议,但我的例子是简化了,我真的不想只是重定向到GET。我想我可以做这个工作,但我希望有一个解决方案可以让模型重写POST的值。 –

+0

@LeslieHanks - 对不起,误解,请参阅我的编辑。 –

+0

更多详细信息,请访问:http://blogs.msdn.com/b/simonince/archive/2010/05/05/asp-net-mvc-s-html-helpers-render-the-wrong-value.aspx –

0

没有办法使用内置的助手去做。您必须手动

做使用helper得到名字:

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