gpt4 book ai didi

c# - 创建一个帮助程序来覆盖 CheckboxFor

转载 作者:太空狗 更新时间:2023-10-30 00:10:21 26 4
gpt4 key购买 nike

我正在开始的一个新项目中使用 bootstrap 5,我决定创建一个包装器来自动为我执行此操作,而不是必须围绕表单字段编写所有脚手架。

我对 textboxfor、textareafor 和 dropdownlist 使用了以下语法:

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)

但是这似乎不适用于复选框:

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

如果我改变 TPropertybool然后它会编译,但我在调用此帮助器的行中遇到运行时错误:

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 函数吗。

最佳答案

立即停止并从您的项目中删除所有这些代码。

您需要的是编辑器模板。首先,在 Views\Shared\EditorTemplates 中创建一个新文件夹。然后,在该文件夹中,创建以类型或 DataType 枚举的成员之一命名的 View 。例如:

Views\Shared\EditorTemplates\String.cshtml

<div class="form-control">
@Html.Label("", new { @class = "col-sm-3 control-label" })
<div class="col-sm-5">
@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue.ToString(), new { @class = "form-control" })
</div>
</div>

或者对于您的复选框场景,例如:

Views\Shared\EditorTemplates\Boolean.cshtml

@model Boolean?
<div class="form-control">
<div class="col-offset-sm-3 col-sm-5">
<div class="checkbox">
<label>
@Html.CheckBox("", Model ?? false)
@ViewData.ModelMetadata.GetDisplayName()
</label>
</div>
</div>
</div>

冲洗并重复您需要的任何其他东西。那么在你的 View 中,你只需要做:

@Html.EditorFor(m => m.TheProperty)

并且根据属性的类型或用什么 DataType 装饰,将使用正确的编辑器模板,开发人员无需记住使用自定义助手。

我的博客上有更深入的解释:

关于c# - 创建一个帮助程序来覆盖 CheckboxFor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27303529/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com