我是靠谱客的博主 怡然嚓茶,最近开发中收集的这篇文章主要介绍mvc2 html.valuefor,MVC @Html.EditorFor缓存Model的值是bug吧?小心入坑,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近遇到一个ASP.NET mvc的问题。

需求是这样的:在新增页面新增成功后,页面输入的控件全部清空,并输出添加成功文字。

前台页面:

50f4844bde5920235a2b3f0e5d0306a8.png

后台代码:

public ActionResult Add()

{

var m = new MPart();

return View(m);

}

[HttpPost]

public ActionResult Add([Bind(Exclude = "OID")]MPart model)

{

if (string.IsNullOrEmpty(model.CodeNo))

ModelState.AddModelError("error", "零件编号不能为空!");

else if (string.IsNullOrEmpty(model.Name))

ModelState.AddModelError("error", "零件名称不能为空!");

if (ModelState.IsValid)

{

var user = LoginStateHelper.CurrentUserOrDefault;

var r = PartService.Insert(model);

ViewBag.Message = "添加成功!";

model = new MPart();

return View(model);

}

else

return View(model);

}

运行结果出入意料的是:在新增页面新增成功后,页面输入的控件值并没有清空。可以从上面代码可以看到返回的是一个全新的Model对象,new了一个新模型对象。

结果如下图:

43a221d85667aac229c41d8b5c6bb387.png

解决办法:

在返回视图之前加上:ModelState.Clear()

8a800b90f858fdbfe6c7b8be7f4bce85.png

最后结果就是我所期望的。

28fde89f1674cbb70a9cbf3eace6884e.png

原因分析:

InputHelper方法(Html.EditorFor)会先从当前ModelState中获取,如果该值在ModelState中不存在,才会从当前ViewData中获取。

public static class InputExtensions

{

private static MvcHtmlString InputHelper(HtmlHelper htmlHelper, InputType inputType, ModelMetadata metadata, string name, object value, bool useViewData, bool isChecked, bool setId, bool isExplicitValue, string format, IDictionary htmlAttributes);

}

private static MvcHtmlString InputHelper(HtmlHelper htmlHelper, InputType inputType, ModelMetadata metadata, string name, object value, bool useViewData, bool isChecked, bool setId, bool isExplicitValue, string format, IDictionary htmlAttributes)

{

switch (inputType)

{

default:

{

string str4 = (string) htmlHelper.GetModelStateValue(fullHtmlFieldName, typeof(string));

tagBuilder.MergeAttribute("value", str4 ?? (useViewData ? htmlHelper.EvalString(fullHtmlFieldName, format) : str2), isExplicitValue);

goto Label_016C;

}

}

}

同理@Html.TextBoxFor、@Html.EditorFor、@Html.EditorForModel也有同样的问题,用得时候要多注意,小心入坑。

延伸阅读:

http://www.cnblogs.com/artech/p/asp-net-mvc-bug.html

http://stackoverflow.com/questions/1775170/asp-net-mvc-modelstate-clear

最后

以上就是怡然嚓茶为你收集整理的mvc2 html.valuefor,MVC @Html.EditorFor缓存Model的值是bug吧?小心入坑的全部内容,希望文章能够帮你解决mvc2 html.valuefor,MVC @Html.EditorFor缓存Model的值是bug吧?小心入坑所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部