2012-04-12 16 views
4

我想創建一個動態CheckBoxFor其中一些項目被禁用。動態CheckBoxFor一些禁用

這一切禁用:

@Html.CheckBoxFor(m=>m.Checked, new { @disabled = "disabled"}) 

我嘗試沒有成功創建這樣的事情:

@Html.CheckBoxFor(m=>m.Checked, new{ @disabled = @(Model.Disable ? "disabled" : "")}) 

一個說明,我的模型有一個名爲殘疾人和其他Checked屬性。

回答

7

這不起作用,因爲禁用屬性會禁用CheckBox,而不管它的值是什麼。

我不知道如何在一行中做到這一點,但這裏有一個解決辦法:

@if(Model.Disabled) 
{ 
    @Html.CheckBoxFor(m=>m.Checked, new { @disabled = "disabled"}) 
} 
else 
{ 
    @Html.CheckBoxFor(m=>m.Checked) 
} 

一個潛在的HTML輔助擴展:

public static MvcHtmlString CheckBoxFor<TModel>(
     this HtmlHelper<TModel> helper, 
     Expression<Func<TModel, bool>> expression, 
     object htmlAttributes, 
     bool isDisabled) 
{ 
    var dic = htmlAttributes.GetType() 
      .GetProperties() 
      .ToDictionary(p => p.Name, p => p.GetValue(htmlAttributes, null)); 

    if (isDisabled) 
     dic["disabled"] = "disabled"; 

    return helper.CheckBoxFor(expression, dic); 
} 
+0

如果我想定義的檢查/未檢查。很多'如果'將創建難以閱讀的代碼 – Custodio 2012-04-13 13:38:34

+0

@Custódio我編輯了我的答案。也就是說,Checked/not checked已經包含在你的Checked變量中,所以你不應該明確地定義它。 – DMulligan 2012-04-13 15:05:51