我在啓動一個新項目中使用引導程序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