我在启动一个新项目中使用引导程序5,而不是必须围绕表单字段编写所有脚手架,我决定创建一个包装器来自动为我执行此操作。创建一个帮助器来覆盖复选框For
我已经使用textboxfor,textareafor和下拉列表的语法如下:
public static MvcHtmlString MyTextBoxFor<TModel, TProperty>(
this HtmlHelper<TModel> helper,
Expression<Func<TModel, TProperty>> expression)
{
var stringbuilder = new MvcHtmlString("<div class='form-group'>" +
helper.LabelFor(expression, new {@class = "col-sm-3 control-label"}) +
"<div class='col-sm-5'>" +
helper.TextBoxFor(expression, new {@class = "form-control"}) +
"</div>" +
"</div>");
return stringbuilder;
}
然后可以称为如下:
@FormHelpers.MyTextBoxFor(Html, x => x.Name)
然而,这似乎并不为checkboxfor工作:
Error 1 'System.Web.Mvc.HtmlHelper<TModel>' does not contain a definition for 'CheckBoxFor' and the best extension method overload 'System.Web.Mvc.Html.InputExtensions.CheckBoxFor<TModel>(System.Web.Mvc.HtmlHelper<TModel>, System.Linq.Expressions.Expression<System.Func<TModel,bool>>)' has some invalid arguments
如果我改变TProperty
到bool
它会再编译,但我上线运行时错误,我把这个助手:
CS0411: The type arguments for method 'CollectionSystem.Helpers.FormHelpers.MyCheckboxFor<TModel,TProperty>(System.Web.Mvc.HtmlHelper<TModel>, System.Linq.Expressions.Expression<System.Func<TModel,bool>>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.
可有人建议我怎么能去包裹CheckboxFor功能请。
谢谢克里斯。我只是在阅读你的博客。我在这个部分发现了一个错字:“听起来很简单,这是怎么回事?”,第一段,第三行,“......这些视图的模型......” – Celdor 2015-02-07 02:49:28
@Chris Pratt在EditorTemplates中使用Checkboxes和Radiobuttons怎么样? – 2015-05-04 18:56:17
收音机通常不用于“bool”类型,除非您真的需要收音机来播放真实值和假值。尽管如此,如果你想能够处理相同的类型,在这种情况下使用'bool',或者使用其中一种,你需要一些方法来区分。这可以通过多种方式完成。你可以在属性上使用'[UIHint(“Radio”)]''来指定应该使用'Radio.cshtml'编辑器模板。或者你可以传递一些值到'ViewData'模板中,并在该模板上分支:'Html.EditorFor(m => m.SomeBool,new {useRadios = true})',然后在'ViewData [“useRadios” – 2015-05-04 19:09:09