asp.net-mvc-3 – ASP.NET MVC – 在不重写方法的情况下扩展TextBoxFor
发布时间:2020-05-23 21:43:10 所属栏目:asp.Net 来源:互联网
导读:有没有办法在输出上使用扩展方法扩展基本的html助手(TextBoxFor,TextAreaFor等),而不是仅仅重写整个方法?例如,添加… @ Html.TextBoxFor(model = model.Name).Identity(“idName”) 我知道我可以通过以下方式实现这一点,已经…… @ Html.TextBoxFor(model =
|
有没有办法在输出上使用扩展方法扩展基本的html助手(TextBoxFor,TextAreaFor等),而不是仅仅重写整个方法?例如,添加… @ Html.TextBoxFor(model => model.Name).Identity(“idName”) 我知道我可以通过以下方式实现这一点,已经…… @ Html.TextBoxFor(model => model.Name,new {@id =“idName”}) 但是,当您必须开始添加大量属性时,管理变得笨拙和令人沮丧.有没有办法在没有为每个细节传递htmlAttributes的情况下为这些内容添加扩展? 解决方法正如@AaronShockley所说,因为TextBoxFor()返回一个MvcHtmlString,所以开发修改输出的’流体API’样式的唯一选择是对辅助方法返回的MvcHtmlStrings进行操作.这样做的一种略微不同的方式,我认为接近你所追求的是使用’属性构建器’对象,如下所示: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);
}
然后你可以在你的视图中做这样的事情: @this.Html.TextBoxFor(
model => model.Name,p => p.Id = 7,p => p.Class = "my-class")
这为您提供了输入属性的强类型和智能感知,您可以通过向适当的MvcInputBuilder子类添加属性来为每个扩展方法自定义. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – HttpCookieCollection.Add和HttpCookieCollecti
- asp.net-mvc – ASP.Net MVC加载进度指标
- asp.net-mvc-5 – Sharepoint 2013 MVC 5提供商托管的应用程
- asp.net – 如何将配置转换应用于外部配置文件
- asp.net-mvc – 在ASP.Net MVC视图中显示/隐藏链接
- asp.net-mvc – 实现IModelBinder的最佳实践
- asp.net – 错误消息401.2:未授权:由于服务器配置,登录失
- asp.net-mvc – 在VS2015中使用gulp在ASP.NET 4.5.2 MVC项目
- asp.net-mvc – @ Html.ActionLink如何添加一个查询字符串
- asp.net – SignalR:如何强制认证/终止中心连接服务器端
推荐文章
站长推荐
- asp.net-mvc – 我在MVC 5 Visual Studio 2013中
- asp.net-mvc – ASP.NET MVC使用相同的控制器分离
- 处理ASP.NET MVC中的异步请求
- asp.net – 什么是global.asax用于?
- Asp.net MVC Razor – 自定义javascript里面的if
- asp.net core 2.0 – 多个项目解决方案docker文件
- asp.net-identity – 为什么一个站点的ASP.NET身
- asp.net – 连接池的最大和最小大小是多少ADO.Ne
- asp.net-mvc – 十进制的最佳数据注释(18,2)
- asp.net – 表单认证ReturnUrl和子域名用于单点登
热点阅读
