2016-11-22 66 views
-1

我有一個布爾值IsAcre。如果爲true,那麼文本框需要能夠接受一個值。如果爲false,則該文本框應該是隻讀的。我嘗試幾種不同的方法:如何在MVC 5剃鬚刀視圖上設置動態只讀?

@Html.EditorFor(model => model.Activity.Acres, new { htmlAttributes = new { @class = "form-control", Model.Activity.IsAcres ? null : @readonly = "readonly" }}) 

@Html.TextBoxFor(model => model.Activity.Volume, new { @class = "form-control", @readonly = "@Model.Activity.IsVolume" }) 

第一個似乎是syntacticlly不正確,第二個呈現爲:

readonly="False" 

即使它呈現假只讀,文本框仍然設置爲只讀,我假設因爲布爾值作爲字符串傳遞。

有沒有辦法做到這一點在線或將要的if/else對整個文本框?

+0

我看到的價值屬性。所以readonly = false實際上等於缺少readonly關鍵字,是的? – BattlFrog

+0

謝謝。當你得到一分鐘,設置爲答案。 – BattlFrog

回答

1

readonly屬性是boolean attribute這意味着它的存在表示真實值,因此您的第二個代碼片段呈現readonly="False"使輸入只讀(儘管其無效html)。另請注意,從規格

布爾屬性不允許值「true」和「false」。爲了表示一個錯誤的值,該屬性必須完全省略。

您需要使用的代碼在你的第一個代碼段,以確保要麼增加或省略的屬性,雖然可以使用替代品,如

@{ var attributes = Model.Activity.IsAcres ? (object)new { @class = "form-control"} : (object)new { @class = "form-control", readonly = "readonly" }; } 
@Html.TextBoxFor(model => model.Activity.Volume, attributes) 

,如果這是你經常使用,那麼你可以創建一個HtmlHelper擴展方法是有條件基礎上增加其他屬性(比如說)

@Html.ReadOnlyTextBoxIf(m => m.Activity.Acres, Model.Activity.IsAcres, new { @class = "form-control" })