2012-12-19 50 views
0

我有一個模型屬性:值不顯示[HiddenInput]在MVC

[HiddenInput(DisplayValue = false)] 
public string MyProperty { get; set; } 

當我顯示屬性,沒有被示出:

@Html.Display("MyProperty") 

注意,由於這是用於顯示,我不嘗試使用:

@Html.Editor("MyProperty") 

它顯示了價值,如果我使用:

@Html.Value("MyProperty") 

...但這繞過DisplayTemplates。

我猜MVC渲染邏輯有一些東西來阻止顯示值與我前面提到的[HiddenInput]屬性,但如果我想明確這樣做,我會使用[ShowForDisplay(false)]

任何想法?

回答

3

Display函數「返回由字符串表達式表示的對象中的每個屬性的HTML標記」(請參閱​​http://msdn.microsoft.com/en-us/library/ee310174(v=vs.98).aspx)。

這意味着,如果你的領域是一個隱藏的話,會確實吐出的標記,但由於標記是一個隱藏字段,你將看不到直接在頁面上的任何內容。你會得到一些符合<input type="hidden" value="your value" />的東西。如果你查看頁面代碼,你會看到標記在那裏。

如果你想只顯示你的頁面上的值,你可以簡單地做@Model.Property。如果要將值輸入到控件中,可以調用多個基於@Html的控件中的任何一個,並輸入Model.Property作爲默認值。

就個人而言,我不喜歡定義頁面應該是什麼樣子的模型的想法。對我而言,價值本身應該由模型來管理,但它的顯示方式應該放在您的視圖本身上。


我明白你在使用顯示器而不是輸入視圖。無論該雖然,HiddenInput屬性簡單地指出,當一個編輯器呈現爲場(例如用@Html.EditorFor()),它應該是一個隱藏的輸入HTML元素。如果你不想渲染編輯器,那麼這個屬性對結果沒有任何影響,你可以簡單地執行@Model.Property來渲染屏幕上的元素,就像我之前提到的那樣。

+0

謝謝,但我認爲你誤解了我的問題。這是一個顯示視圖,而不是編輯視圖(我曾提到過)。我不明白爲什麼編輯器屬性,如[HiddenInput]應該會影響顯示。在這種情況下,Display函數返回的HTML是zilch。 –

+0

查看更新的答案。 –

+0

再次感謝,但我不能那樣做。這是一個通用屏幕,我只能按名稱呈現屬性。另外,我需要爲顯示模板添加一些額外的視圖數據,所以我依賴於Html.Display函數。 –

0

您可以嘗試只是[HiddenInput]而不是[HiddenInput(DisplayValue = FALSE)]。這會自動顯示顯示的字段並將其編輯爲標籤。希望這可以幫助。