gpt4 book ai didi

asp.net-mvc-3 - ASP.NET MVC - 无需重写方法即可扩展 TextBoxFor

转载 作者:行者123 更新时间:2023-12-04 05:42:45 25 4
gpt4 key购买 nike

有没有可能的方法来扩展基本的 html 助手( TextBoxForTextAreaFor 等)在其输出上使用扩展方法,而不是完全重写整个方法?例如,加入...
@Html.TextBoxFor( model => model.Name ).Identity("idName")
我知道我可以使用以下方法实现这一点,已经..
@Html.TextBoxFor( model => model.Name, new { @id = "idName" })
但是,当您必须开始添加大量属性时,管理起来会变得笨拙且令人沮丧。有没有什么方法可以在不传入 htmlAttributes 的情况下为这些固有地添加扩展?每一个小细节?

最佳答案

正如@AaronShockley 所说,因为 TextBoxFor()返回 MvcHtmlString ,开发“流体 API”风格来修改输出的唯一选择是在 MvcHtmlString 上进行操作。 s 由辅助方法返回。一种稍微不同的方法,我认为接近您所追求的方法是使用“property builder”对象,如下所示:

public class MvcInputBuilder
{
public int Id { get; set; }

public string Class { get; set; }
}

...并设置这样的扩展方法:
public static MvcHtmlString TextBoxFor<TModel, TProp>(
this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProp>> expression,
params Action<MvcInputBuilder>[] propertySetters)
{
MvcInputBuilder builder = new MvcInputBuilder();

foreach (var propertySetter in propertySetters)
{
propertySetter.Invoke(builder);
}

var properties = new RouteValueDictionary(builder)
.Select(kvp => kvp)
.Where(kvp => kvp.Value != null)
.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

return htmlHelper.TextBoxFor(expression, properties);
}

然后你可以在你的 View 中做这样的事情:
@this.Html.TextBoxFor(
model => model.Name,
p => p.Id = 7,
p => p.Class = "my-class")

这为您提供了输入属性的强类型和智能感知,您可以通过将属性添加到适当的 MvcInputBuilder 子类来为每个扩展方法自定义。

关于asp.net-mvc-3 - ASP.NET MVC - 无需重写方法即可扩展 TextBoxFor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6202053/

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