繁体   English   中英

如何通过属性名称呈现模型属性的编辑器模板

[英]How to render editor template for model property by property name

最终目标是为仅在运行时已知的模型属性呈现一个编辑器模板,该编辑器模板不会从ViewBag中获取其值。

如果属性名称匹配,则Html.Editor将使用ViewBag值。 我不要这个,我讨厌这个“功能”。

我希望这是有可能的:

var propName = "MyProperty";
var expression = GiveMeTheExpression();
@Html.EditorFor(expression,"MyEditorTemplate")

如果不是这样,则可以使用某种方式呈现编辑器模板,而不使用viewbag值而不是模型的值。 如果我可以略过VIEWBAG的值,我完全可以这样做:

@Html.Editor(propName, other, arguments)

您可能必须将Html.Partial与自定义ViewDataDictionary一起使用。

object knownAtRuntime = ViewBag.ObjectName; // Adapt to your solution
string templateName = String.Concat("EditorTemplates/", knownAtRuntime.GetType().Name);            

@Html.Partial(templateName, knownAtRuntime, new ViewDataDictionary(knownAtRuntime));

注意:我简化了此示例以说明核心概念,但是您可以根据需要将其扩展为读取UIHintAttribute等。

注意2:您可能还想将值从Html.ViewData复制到新的ViewDataDictionary,以保持您的模型状态等。

为什么不试试这个呢?

@Html.EditorFor(x=>x.SomePropertyName)

假设SomePropertyName是您模型的属性的名称,该属性在视图中具有强类型。

Shyju正在处理强类型对象,如果我对您的理解正确,则需要类似以下内容: asp.net mvc 3和动态视图生成

我的解决方案是使用属性名称作为字符串的@ Html.Editor()方法,并使用在模型对象上不太可能找到的ViewBag键。

不理想,但应该能很好地工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM