如何将复选框绑定到asp net mvc中的字符串属性

时间:2011-09-02 16:54:41

标签: asp.net-mvc checkbox

我的课程中有一些代表真或假的字段,但字符串值为“T”或“F”。

如何将复选框绑定到这些字段?

3 个答案:

答案 0 :(得分:7)

您可以在ASP.Net MVC Razor中执行此操作

<input type="checkbox" name="someName" value="@Model.SomeValue" 
@(Model.IsChecked == "T" ? "checked='checked'" : "") />

但是,这可能不是您要查找的内容,因为您必须在服务器上进行一些手动操作才能找出“未选中”的值。

默认情况下,只有您选中的值才会发送到服务器。

UPDATE:

Html.CheckBoxHtml.CheckBoxFor辅助方法都会发出隐藏字段,以确保所有内容都能正确绑定回您的模型。你可以很容易地模仿这种行为。

首先,您需要发出一个隐藏字段,该字段将绑定到服务器上的模型。

@Html.HiddenFor(model => model.StringBool, new { id = "_stringBool" })

接下来,您将创建一个简单的jane复选框并设置初始状态以反映您的模型。

<input type="checkbox" id="myCheckBox" @(Model.StringBool == "T" ? "checked='checked'" : "") />

此复选框的唯一用途是将值与隐藏字段进行代理,以便您的模型自动绑定到服务器上。这可以通过一些简单的jQuery来实现。

$("#myCheckBox").click(function () {
   var isChecked = $(this).is(":checked");

   $("#_stringBool").val(isChecked ? "T" : "F");
});

现在选中并取消选中该框将相应地设置绑定隐藏字段的值。当您发布到服务器时,您的值将通过模型绑定保留。

需要注意的一些事项

这不考虑验证。更改隐藏字段的值非常容易,因此确保在服务器端正确验证!

答案 1 :(得分:0)

设置新复选框项的检查状态时,只需输入if语句:

checkBox1.Checked =(stringValue ==“T”)? true:false;

答案 2 :(得分:0)

我自己做了扩展来解决这个问题。它在razorview中有点小,有助于减少c#/ razor混合物。这是班级:

public static class CheckBoxExtensions {

    public static MvcHtmlString ValueCheckbox<TModel>(this HtmlHelper<TModel> htmlHelper, string name, string value, bool isChecked, IDictionary<string, object> htmlAttributes, bool disabled = false)
    {
        string result = string.Format(CultureInfo.InvariantCulture, 
            "<input type=\"checkbox\" name=\"{0}\" value=\"{1}\" {2} {3} ",
            name, value, (isChecked) ? "checked=\"checked\"" : "", (disabled) ? "disabled=\"disabled\"" : "");

        if (htmlAttributes != null && htmlAttributes.Count > 0)
        {
            foreach (KeyValuePair<string, object> item in htmlAttributes)
            {
                result += string.Format(CultureInfo.InvariantCulture, "{0}=\"{1}\" ", item.Key, item.Value.ToString());
            }
        }

        result += " />";

        return new MvcHtmlString(result);
    } 
}

这就是我在razorview中所做的:

Html.ValueCheckbox("SelectedItems", 
    item.Number, 
    (Model.SelectedItems.Contains(item.Number)), 
    new Dictionary<string, object>() { 
        { "data-disable-bubble", "true" }, 
        { "data-forms-enable-any-checked-checkbox", "true" } 
    }
)

别介意堰HtmlAttributes,我想我会把它们放在那里: - )