如何按属性名称为模型属性呈现编辑器模板

时间:2012-09-14 03:57:00

标签: asp.net .net asp.net-mvc

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

如果属性名称匹配,

Html.Editor将使用ViewBag值。我不想要这个,我讨厌这个“功能”。

我希望这有可能以某种方式:

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

如果不是这样,那么渲染编辑器模板的某种方式不使用viewbag值而不是模型的值。我完全没有这样做,如果我不知道观点价值如何:

@Html.Editor(propName, other, arguments)

4 个答案:

答案 0 :(得分:1)

您可能必须将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以保持模型状态等。

答案 1 :(得分:0)

为什么不尝试这个?

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

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

答案 2 :(得分:0)

Shyju 关注强类型对象,如果我理解正确,您需要以下内容:asp.net mvc 3 and dynamic view generation

答案 3 :(得分:0)

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

不理想,但应该运作良好。