簡體   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