2016-04-07 33 views
1

我有這是一個通用的看起來像一個屬性的模型:ASP.NET MVC手動應用DisplayFormat

class PairedData<T> 
{ 
    public T Value {get;set;} 
    public bool IsValid {get;set;} 
} 

在這個模型中,我有:

class SomeModel 
{ 
    [UIHint ("PairedInt")] 
    public PairedData<int> SomeInt {get;set;} 

    [UIHint ("PairedDateTime")] 
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}"] 
    public PairedData<DateTime> SomeDate {get;set;} 
} 
在我的顯示模板

然後對於PairedDateTime我有:

@model PairedData<DateTime> 

@Html.DisplayFor(m => m.Value) 

問題是DisplayFor不適用日期格式。原因很明顯 - DisplayFormat屬性在SomeDate上,而不是在Value屬性上,所以沒有被讀取。

所以問題是,有沒有辦法告訴DisplayFor從其他地方讀取屬性?或者有沒有辦法在顯示模板中手動將相同的信息傳遞給DisplayFor?或者是否有一種方法可以將屬性應用於Value僅在DateTime實例化中(不太可能,我認爲)?

在此先感謝。

回答

1

你可以嘗試格式化這個視圖上,如果你確信這將永遠是一個DateTime:

@Html.DisplayFor(m => m.Value, "{0:dd/MM/yyyy}", new {maxlength=10}) 

這工作,但我會建議你通過達里爾建議的方法和bkaid這裏:https://stackoverflow.com/a/6733855/1638261

+0

謝謝 - 這將在這種特定的情況下。我仍然對更一般的方法感興趣。 –

+0

請看我的編輯 – jomsk1e

+0

其實,這似乎並不奏效。字符串參數是模板名稱,而不是日期格式。 我沒有看到關於格式的鏈接文章中的任何內容。 –

0

默認情況下,DataType Annotation將爲您提供日期格式mm/dd/yyyy,其輸入將是一個下拉列表,並且與DisplayFormat結合可以提供您正在查找的結果。

[DataType(DataType.Date)] 
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)] 
+0

問題是我正在使用泛型,所以雖然該註釋適用於DateTime實例,但它不適用於int。 問題依然存在 - 我如何將不同的屬性應用於泛型的不同實例? –