2011-03-28 76 views
0

我有一個MVC 3應用程序,它應該允許用戶顯示和編輯不同類型的值。負責這樣做的視圖並不知道值的類型(它被聲明爲對象),但我希望它能夠呈現正確的編輯器模板。現在我有這個:MVC 3不呈現對象的編輯器模板

<%: Html.EditorFor(n => attribute.ValueTyped) %> 

attribute.ValueTyped是類型的對象。當ValueTyped是bool類型時,MVC呈現一個複選框(這是它應該做的)。然而,只要ValueTyped是一個不同類型(到目前爲止我已經嘗試過int,double,string),MVC根本不會渲染任何東西。

我該如何讓MVC呈現我的ValueTyped包含的int,double,string或其他類型的泛型模板?請注意:我不想自己生成文本框,但我寧願讓MVC決定使用哪個編輯器模板。

回答

1

您可以嘗試通過傳遞作爲第二個參數來顯式傳遞編輯器模板的名稱。根據您的動態情況下,這可能如下所示:

<%: Html.EditorFor(m => attr.ValueTyped, attr.ValueTyped.GetType().Name) %> 

當然,你的問題是很老 - 也許你可以與你找到了答案更新呢?

+0

我沒有真正找到一個辦法。但是,到目前爲止,我想用於此的屬性已從基礎數據模型中刪除,所以問題消失了。 – Chris 2013-02-08 08:58:20

1

設置MVC 3應用程序時,應允許使用下拉列表選擇項目的外鍵不會呈現爲下拉菜單,而是呈現爲靜態輸入。這可以通過爲該字段創建自定義顯示和視圖來解決。 我們需要從創建一個定製的部分視圖開始,這個視圖將位於「〜/ Views/Shared/DisplayTemplates/UserGuid.cshtml」和「〜/ Views/Shared/EditTemplates/UserGuid.cshtml」中。代碼如下所示:

@model Guid 

@{ 
    incMvcSite.Models.MvcSiteDB db = new incMvcSite.Models.MvcSiteDB(); 
    incMvcSite.Models.SecUser usr = db.SecUsers.Single(u => u.Guid == Model); 
} 
@usr.Display 

這是一個模板顯示,它將查找引用表中的項目並顯示它。我們還需要對模板進行編輯,如下所示:

@model Guid 
@{ 
    incMvcSite.Models.MvcSiteDB db = new incMvcSite.Models.MvcSiteDB(); 
    SelectList items = new SelectList(db.SecUsers.OrderBy(i => i.Display).ToList(), "Guid", "Display", Model); 
} 
@Html.DropDownList("", items) 

模板的編輯是作爲下拉列表實現的。最初,我們使用靜態HTML代碼,但問題會出現在實現「前綴」。靜態HTML代碼不會被HTML助手處理,因此建議您使用HTML.DropDownList()。 要強制MVC架構的使用,新的模板顯示和編輯,我們需要annote我們的模型項目中添加以下行: [UIHint(「UserGuid」)

這將導致MVC使用多媒體和名爲「UserGuid」的編輯模板,它們只是部分視圖。

+0

雖然你的答案解釋瞭如何很好地渲染下拉列表,但它沒有解決我如何根據傳入的對象的類型自動決定使用哪個模板的問題。 – Chris 2012-11-21 07:39:02