我的课程中有一些代表真或假的字段,但字符串值为“T”或“F”。
如何将复选框绑定到这些字段?
答案 0 :(得分:7)
您可以在ASP.Net MVC Razor中执行此操作
<input type="checkbox" name="someName" value="@Model.SomeValue"
@(Model.IsChecked == "T" ? "checked='checked'" : "") />
但是,这可能不是您要查找的内容,因为您必须在服务器上进行一些手动操作才能找出“未选中”的值。
默认情况下,只有您选中的值才会发送到服务器。
Html.CheckBox
和Html.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,我想我会把它们放在那里: - )