2012-11-22 3 views

答えて

12

をチェックしない場合はチェックする必要がありますあなたのモデルのintに/から変換するboolプロパティを公開しますか?このような

何か:

public bool BoolValue 
{ 
    get { return IntValue == 1; } 
    set { IntValue = value ? 1 : 0;} 
} 

public int IntValue { get; set; } 

その後、あなたは上記の回答は私にエラーを与えたが、同じ考え方に基づいて、いくつかの理由で、チェックボックス

@Html.CheckBoxFor(m => m.foo.BoolValue) 
6

を作成するためにそれを使用することができ、私は変更をしました次のようなコード:

​​

これは私のためのコードです。

0

ここではint型の値を処理するためのチェックボックスヘルパー例です:

public static MvcHtmlString CheckBoxIntFor<TModel>(this HtmlHelper<TModel> html, Expression<Func<TModel, int>> expression, object htmlAttributes)   
    { 
     // get the name of the property 
     string[] propertyNameParts = expression.Body.ToString().Split('.'); 

     // create name and id for the control 
     string controlId = String.Join("_", propertyNameParts.Skip(1)); 
     string controlName = String.Join(".", propertyNameParts.Skip(1)); 

     // get the value of the property 
     Func<TModel, int> compiled = expression.Compile(); 
     int booleanSbyte = compiled(html.ViewData.Model); 

     // convert it to a boolean 
     bool isChecked = booleanSbyte == 1; 

     // build input element 
     TagBuilder checkbox = new TagBuilder("input"); 
     checkbox.MergeAttribute("id", controlId); 
     checkbox.MergeAttribute("name", controlName); 
     checkbox.MergeAttribute("type", "checkbox"); 
     checkbox.MergeAttribute("value", "0"); 

     if (isChecked) 
     { 
      checkbox.MergeAttribute("checked", "checked"); 
      checkbox.MergeAttribute("value", "1"); 
     } 
     SetStyle(checkbox, htmlAttributes); 

     TagBuilder hidden = new TagBuilder("input"); 
     hidden.MergeAttribute("name", controlName); 
     hidden.MergeAttribute("type", "hidden"); 
     hidden.MergeAttribute("value", "0"); 

     // script to handle changing selection 
     string script = "<script>" + 
          "$('#" + controlId + "').change(function() { " + 
           "if ($(this).is(':checked')) "+ 
            "$(this).val('1'); " + 
           "else " + 
            "$(this).val('0'); " + 
          "}); " + 
         "</script>"; 

     return MvcHtmlString.Create(checkbox.ToString(TagRenderMode.SelfClosing) + hidden.ToString(TagRenderMode.SelfClosing) + script); 
    } 

    private static void SetStyle(TagBuilder control, object htmlAttributes) 
    { 
     if(htmlAttributes == null) 
      return; 

     // get htmlAttributes 
     Type t = htmlAttributes.GetType(); 
     PropertyInfo classInfo = t.GetProperty("class"); 
     PropertyInfo styleInfo = t.GetProperty("style"); 
     string cssClasses = classInfo?.GetValue(htmlAttributes)?.ToString(); 
     string style = styleInfo?.GetValue(htmlAttributes)?.ToString(); 

     if (!string.IsNullOrEmpty(style)) 
      control.MergeAttribute("style", style); 
     if (!string.IsNullOrEmpty(cssClasses)) 
      control.AddCssClass(cssClasses); 
    } 
関連する問題