2015-01-09 30 views
0

我正在一個頁面上,我想添加類到控件基於條件。我嘗試了下面的代碼,但是當我在cshtml文件中添加動態類名時,它以錯誤的方式渲染。任何建議?asp.net mvc剃刀變量不正確設置

object TitleClass = (Model.Id != 0 && Model.IsApproved) ? 
     (object)new { @disabled = "disabled", @class = "headerBox" } : new{ @class = "headerBox"}; 

    <div> 
     @Html.TextBoxFor(model => model.Title, new { @placeholder = "New Title", TitleClass }) 
     @Html.ValidationMessageFor(model => model.Title) 
    </div> 

呈現爲

<input name="Title" id="Title" type="text" placeholder="New Demand Title" value="cpx appr with orders" data-val-required="Enter Demand Title" data-val="true" titleclass="{ disabled = disabled, class = headerBox }"> 

試圖使它呈現爲

<input name="Title" id="Title" type="text" placeholder="New Demand Title" value="cpx appr with orders" data-val-required="Enter Demand Title" data-val="true" disabled = disabled class = headerBox > 

回答

1

您需要的placeholder屬性添加到TitleClass以避免造成2套新的匿名對象

object TitleClass = (Model.Id != 0 && Model.IsApproved) ? 
    (object)new { @placeholder = "New Title", @disabled = "disabled", @class = "headerBox" } : (object)new{ @placeholder = "New Title", @class = "headerBox"}; 

和改變TextBoxFor()方法

@Html.TextBoxFor(m => m.Title, TitleClass) 

邊注:設置disabled = "disabled"意味着文本框不會回來後和財產Title會的價值空在控制器

+0

當我使用禁用=禁用時控制器中的getrid null值的任何替代? – Kurkula

+0

你可以使用'readonly =「只讀」'所以它不能被改變(並且你總是可以使用'css'來設置它看起來像一個被禁用的控件,如果需要的話) –

+1

我認爲最好的解決方案是不要設置輸入爲禁用/從Razor視圖中只讀,但使用Javascript來完成,例如將Model.IsApproved保存在隱藏字段中並讀取隱藏字段值。這樣你就不會改變這個觀點 – Catalin

1

嘗試:

object attributes = (Model.Id != 0 && Model.IsApproved) ? 
     (object)new { @placeholder = "New Title", @disabled = "disabled", @class = "headerBox" } : new{ @placeholder = "New Title", @class = "headerBox"}; 

    <div> 
     @Html.TextBoxFor(model => model.Title, attributes) 
     @Html.ValidationMessageFor(model => model.Title) 
    </div>