私は、int値を取得しているCheckBoxForを構築するのに助けが必要です。どのように私はCheckBoxFor intを使用することができますか?
ような何か:@ Html.CheckBoxForInt(M => m.foo.intValue)
intValue = 1他にあなたがいないのはなぜ
Thxを
私は、int値を取得しているCheckBoxForを構築するのに助けが必要です。どのように私はCheckBoxFor intを使用することができますか?
ような何か:@ Html.CheckBoxForInt(M => m.foo.intValue)
intValue = 1他にあなたがいないのはなぜ
Thxを
をチェックしない場合はチェックする必要がありますあなたのモデルの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)
を作成するためにそれを使用することができ、私は変更をしました次のようなコード:
これは私のためのコードです。
ここでは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);
}