2010-10-27 50 views
3

基本上我在我的MVC輸出模型中有一個自定義的「Date」類「EndDate」。 僅供參考:「Date」類構建的是DateTime,但隱藏了時間功能。我爲這個Date類型創建了一個顯示模板,它很好地格式化了日期,但是在一次實例中(如下所示),如果對象爲null(在本例中爲EndDate),我希望文本「No End Date Specified」輸出代替。是否可以在Html.DisplayFor調用中放置條件語句?

<%:Html.DisplayFor(m => m.EndDate)%> 

爲Date對象的所有實例,這就是常見的,我不能改變顯示模板,我真的不希望改變模型本身無論是。基本上我想要的東西是這樣的:

<%:Html.DisplayFor((m => (m.EndDate == null) ? "No End Date Specified" : m.EndDate)%> 

上述可能以任何形式?如果不是,那麼實現此功能的更好方法是什麼? 我猜即使有辦法做到這一點,如果這不是一個好主意,請讓我知道爲什麼不這樣做和更好的方式做到這一點

回答

1

嘗試使用UIHint

[UIHint("CustomDateNull")] 
public CustomDate EndDate { get;set; } 

然後創建一個CustomDateNull.ascx顯示模板。在返回Type之前,助手會查找UIHint。

如果根本無法編輯模型,則必須使用RenderPartial並將日期作爲部分視圖的模型傳遞。

+1

謝謝,我已經有了一個玩,並得到它的工作。我也看到「DisplayFor」也可以使用顯示模板名稱,所以我最終得到了以下內容,它不需要在模型中使用UIHint <%:Html.DisplayFor(m => m.EndDate ,「CustomDateNull」)%> – 2010-10-27 14:44:06

+0

@Paul Hadfield太棒了!我沒有看到DisplayFor超載,但這似乎是最好的選擇。 – Jab 2010-10-27 15:04:47

+1

當我遇到零贊成的接受答案時,它激起我的想法。 – jfar 2010-10-28 02:25:58

0

你知道你可以使用更具體的自定義模板文件夾結構中的控制器名稱?

您可能已經創建了:/Shared/DisplayTemplates/CustomDate.ascx 但對於特定的控制器,你可以使用:/MySpecific/DisplayTemplates/CustomDate.ascx

現在你不需要做任何形式的動態DisplayFor調用。您將遇到的問題是DisplayFor確實想知道您的模型表達式來自哪種對象類型的屬性,以便它可以查找元數據。有了像我很確定你打破了查找成員訪問的功能,然後從中查找元數據的lambda。

+0

謝謝,我知道顯示模板的嵌套本質。在這種情況下,它不會幫助,因爲我在同一個模型中有一個「StartDate」(當前也使用相同的DisplayFor顯示)。 – 2010-10-27 12:54:32

相關問題