2017-09-13 38 views
0

我正在開發一個帶有Razor,C#和.NET Framework 4.7的ASP.NET MVC 5應用程序。設置Html.TextBoxFor不可編輯取決於模型值

如果Model.IsChinaProduct爲真,我想讓它成爲不可編輯的文本框。

我有這樣一段代碼在瀏覽:

@Html.TextBoxFor(m => m.Configurations[index].PkgRatio, new { @class = "productClass", @onkeydown = "IsValidKey(event);" @if (Model.IsChinaProduct) disabled}) 

我想補充的disabled屬性如果Model.IsChinaProduct是真實的,但代碼顯示了我下面的錯誤:

Error CS0746 Invalid anonymous type member declarator. Anonymous type members must be declared with a member assignment, simple name or member access.

如何如果Model.IsChinaProduct爲真,我可以添加disabled屬性嗎?

更新:
也許禁用不是正確的屬性。

+1

你真的希望它禁用(禁用輸入不提交一個值)?既然你還有其他屬性,那麼請參考[這個答案](https://stackoverflow.com/questions/34889537/conditional-html-attribute-with-html-helper/34889685#34889685)舉例 –

+0

你在裏面一個函數,創建一個匿名類型..'if'語句在匿名類型聲明中無效。您可能只想將禁用的屬性設置爲true或false。 –

+0

@StephenMuecke對不起,沒有。我想讓它不可編輯。抱歉。 – VansFannel

回答

0

AFAIK你不能,因爲沒有disabled="false",這意味着你應該做這樣的事情:

@{ 
    var htmlAttributes = Model.IsChinaProduct ? (object) 
     new { @class = "productClass", readonly = "readonly" } 
     : new { @class = "productClass", @onkeydown = "IsValidKey(event);" }; 
} 
@Html.TextBoxFor(m => m.Configurations[index].PkgRatio, htmlAttributes) 
+0

這將無法正常工作 - 您需要投射到'object' - 'var htmlAttributes Model.IsChinaProduct? (object)new {...}:(object)new {...}' –

+0

@StephenMuecke謝謝,修正。我總是忘記,直到編譯器提醒我; - )... – ChrFin

0

對於設置它只讀,試試這個:

@{ 
    object displayMode = (Model.IsChinaProduct) ? new { @class = "productClass", @onkeydown = "IsValidKey(event);" } 
               : new { @class = "productClass", @onkeydown = "IsValidKey(event);" readonly = "readonly"}; 
    @Html.TextBoxFor(m => m.Configurations[index].PkgRatio, displayMode) 
} 
0

不使用TextBoxFor If IsChinaProduct = true 嘗試將DisplayFor與HiddenFor結合使用

li ke這

@if (Model.IsChinaProduct) 
{ 
    @Html.HiddenFor(m => m.Configurations[index].PkgRatio) 
    @Html.DisplayFor(m => m.Configurations[index].PkgRatio) 
} 
else 
{ 
    @Html.TextBoxFor(m => m.Configurations[index].PkgRatio) 
} 
相關問題