asp.net-mvc-3 – ASP.NET MVC – 在不重写方法的情况下扩展Text
发布时间:2020-12-16 00:08:18 所属栏目: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-mvc-3 – Request.Url何时可以为null?
- ASP.NET MVC与Webforms:替换WebForms控件
- asp.net – SignalR 2.0超时连接
- asp.net-mvc – 如何通过保持’templateurl’原样来编译ang
- asp.net – 从Web服务返回XElement
- 使用C#通过Oracle.DataAccess连接Oracle,部署时需要注意版
- asp.net – Elmah错误日志记录,我可以只记录一条消息吗?
- asp.net-mvc – 使用MVC 4.0 Web Api的NewtonSoft json Con
- asp.net-mvc – 我应该如何管理ASP.NET MVC 4应用程序中的成
- ASP.NET中实现文件的保护性下载基础篇
推荐文章
站长推荐
- asp.net-web-api – 实现ASP.NET WebAPI版本控制
- asp.net – recaptcha https问题https://api-sec
- asp-classic – IIS Express是否支持ASP Classic
- 使用asp.net和vb.net从sql server导出到excel文件
- asp.net-web-api – 随着SerilogWeb.Owin停产,是
- asp.net – NewRelic – 如何忽略Web应用程序的一
- asp.net-web-api – 什么将WCF Web API中的HttpO
- ASP.NET Web API内存中测试中的内部服务器错误
- asp.net – [DataType(DataType.EmailAddress)]和
- asp.net核心 – 为什么验证类型 – .NET Core中的
热点阅读