2013-02-21 67 views
14

我已經標誌着財產只讀模型類的工作,像這樣:只讀屬性不會在ASP.NET MVC模型

public class RegisterModel 
{ 
    [Display(Name = "User name")] 
    [ReadOnly(true)] 
    public string UserName { get; set; } 
    ... 
} 

在我看來:

@Html.EditorFor(m => m.UserName) 

但是當我運行應用程序時,文本框不是只讀。

我知道我可以在視圖中使用html屬性,以使其只讀,但我寧願如果這可以在模型類本身完成。

可以實現嗎?

+0

嘗試+1! – 2013-02-21 06:13:29

+0

好吧不會吧,你覺得這是神奇的 – 2015-11-24 10:20:36

回答

14

[更新]我不認爲這是可能沒有new { @readonly = "readonly" }Readonly屬性指定此屬性綁定的屬性是隻讀還是讀/寫。 Details Here.

但你可以嘗試爲Custom Helpers,或者嘗試使用Editable代替Readonly在模型上,並在您查看使用元數據屬性。

[Editable(false)] 

我猜你已經看過成 Does ReadOnly(true) work with Html.EditorForModel?

也 罰款文章odetocode.com

+0

另一個優點,但更重要的是,不要指望一切註釋。他們很棒,但是我們被寵壞了,並期望他們在我們之後經常擦一擦 – 2013-02-21 06:16:31

+5

對於這是如何選擇的答案感到困惑我設置了一個簡單的示例項目,並且此解決方案不起作用。是唯一的解決方案。我明白他希望在模型中指定它,但不能這樣做。 – CoderSteve 2014-11-05 13:20:47

+0

我想指出的是,雖然在html中只讀設置它會阻止一般用戶編輯文本框,但任​​何對HTML和JavaScript有一點了解的人都會弄亂一切,所以不要依賴html屬性來保護您的數據。目標是防止模型被改變,而不管前端發生了什麼。 – 2016-10-27 19:52:41

7

ReadOnly屬性不會將輸入設置爲只讀。

試試這個

Html.TextBoxFor(x => x.UserName, new { readonly = "readonly" }) 
+0

謝謝,但正如我所說,我不想用html方式來做到這一點,我正在尋找一些解決方案,將生成「只讀「當從模型中讀取元數據時進入html – 2013-02-21 06:10:34

+0

@EdiWang悲傷這是真的。當我回答問題時,我正準備發佈。 – 2013-02-21 06:10:47

+0

@Dave A哦,真的嗎?這是不好的..... :( – 2013-02-21 06:11:54

0

如果你使用,你必須使用{獲得制定者;私人設置; }。這將使得客戶無法改變價值。您也可以使用HTML 5輸入並在其中標記。

9

ReadOnly屬性不會阻止HMTL助手將該字段顯示爲已啓用的輸入。這是唯一的MVC數據粘結劑將尊重的信息。

這意味着RegisterModel情況下,這將表單提交後由用戶回發,總會有null價值上是UserName財產,不管用戶輸入的表單的相應字段。

+0

我完全誤解了'ReadOnly'的作用。這澄清了它。謝謝! – Bobson 2015-06-18 21:51:53