如何解决使用EditorFor而不是Editor的EditorTemplates / Object.cshtml?
| 我正在尝试创建一个通用的编辑器模板,该模板复制Html.EditorForModel()
,以便以后进行自定义和构建。布拉德·威尔逊(Brad Wilson)的模板非常接近,但是我发现,当ViewData(或ViewBag)和模型中都存在相同的键时,模板会令人窒息。例如,如果视图模型还具有Title
属性,则ViewBag.Title
会引起问题。
我在这里了解到,使用强类型的助手(例如,用Html.EditorFor(x => x.Title)
代替Html.Editor(\"Title\")
似乎有帮助。因此,我尝试修改Brad \的模板,但由于遇到了迄今为止我没有尝试过的所有工作,所以遇到了砖墙。不会弄清楚如何在我不知道模型类型的上下文中使用强类型的帮助器,例如编辑器模板。
有什么方法可以创建类似于Brad \的对象模板,但是使用强类型的助手(即LabelFor,EditorFor,ValidatorMessageFor)而不是弱类型的助手(即Label,Editor,ValidatorMessage)?
谢谢。
解决方法
我通过稍微回旋的方式解决了这个问题,方法是在调用@ Html.Editor之前删除ViewData,然后再将其放回。
Object.cshtml:
object oldViewData = null;
var hasConflictingViewData = ViewData.TryGetValue(prop.PropertyName,out oldViewData);
if (hasConflictingViewData)
{
ViewData.Remove(prop.PropertyName);
}
@Html.Editor(prop.PropertyName)
if (hasConflictingViewData)
{
ViewData.Add(prop.PropertyName,oldViewData);
}
我唯一想到的另一种选择是使用大量反射来泛型地使用运行时类型调用EditorFor,并为相关属性传递表达式。
,您可以通过转到并下载MVC源代码来查看新Object.shtml的所有代码。我以为它已经在您PC上的某个公用文件夹中了,但是我不记得在哪里了。
http://aspnet.codeplex.com/releases/view/58781
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。