我在这里找到了关于将布尔值转换为是/否显示的问题,但没有关于将是/否数据转换为布尔复选框的问题。我们使用的是没有布尔数据类型的ESRI地理数据库,因此我们必须对所有内容使用“是/否”字符串。这意味着我不能在我的编辑器中使用普通的“CheckBoxFor”HTML Helper。
我认为解决方案可能是编写一个自定义助手,但我对MVC并不熟悉,我以前从未这样做过。这就是我所拥有的:
控制器:
public static class FormHelpers
{
public static IHtmlString YesNoCheckBoxFor(this HtmlHelper helper, string fieldName, string YesNoValue)
{
string htmlString = null;
if (YesNoValue == "Yes")
{
htmlString = String.Format("<input name='{0}' type='checkbox' checked='checked' value='Yes'>", fieldName);
}
else
{
htmlString = String.Format("<input name='{0}' type='checkbox' value='Yes'>", fieldName);
}
return new HtmlString(htmlString);
}
}
查看:
@foreach (var field in header.Fields)
{
<div class="fieldOrderBox col-xs-12" data-fieldname="@field.Field">
<div class="col-xs-4">
@Html.YesNoCheckBoxFor("Visible", field.Visible)
</div>
<div class="col-xs-8">
<label>@Html.DisplayFor(fieldItem => field.FieldDisplay)</label>
</div>
</div>
}
复选框显示正确且已正确选中/取消选中。我无法弄清楚的是如何使值返回为“是”或“否”,以及如何使用lambda表达式指示字段来创建像CheckBoxFor(field => field.Visible, ...)
这样的普通强类型帮助器。
对于上下文,我想我最终会尝试将所有“可见”命名字段的值放入一个序列化数组中,通过ajax发送给控制器(我想如果你发送的内容与它放的相同它在一个数组?),但是现在我只想弄清楚如何得到“是”和“否”值,因为这是我可以肯定重用的更简单的形式。