型号:
public sealed class Model
{
public string Value { get; set; }
}
控制器:
[HandleError]
public class HomeController : Controller
{
[HttpGet]
public ActionResult Index()
{
return View(new Model { Value = "+" } );
}
[HttpPost]
public ActionResult Index(Model model)
{
model.Value += "1";
return View(model);
}
}
查看:
<%using (Html.BeginForm()){%>
<%: Model.Value %>
<%: Html.HiddenFor(model => model.Value) %>
<input type="submit" value="ok"/>
<%}%>
每次提交表单结果都是
<form action="/" method="post">+1
<input id="Value" name="Value" type="hidden" value="+">
<input type="submit" value="ok">
</form>
这意味着HiddenFor帮助程序不使用Model.Value的实际值,而是使用传递给控制器1。它是MVC框架中的错误吗?有没有人知道解决方法?
更新: EditerFor的作品类似。
答案 0 :(得分:4)
这将解决您的问题,但这不是推荐的解决方案。
可以在此处找到更多信息:http://blogs.msdn.com/b/simonince/archive/2010/05/05/asp-net-mvc-s-html-helpers-render-the-wrong-value.aspx
[HttpPost]
public ActionResult Index(Model model)
{
model.Value += "1";
ModelState.Clear();
return View(model);
}
[编辑]
如果您不想使用<input id="Value" name="Value" type="hidden" value="<%: Model.Value %>"/>
[HttpPost]
public ActionResult Index(FormCollection collection)
{
var m = new Model();
m.Value = collection["Value"] + "1";
return View(m);
}