asp.net-mvc-3 – TextBoxFor vs EditorFor,和htmlAttributes vs
发布时间:2020-12-15 19:17:46 所属栏目:asp.Net 来源:网络整理
导读:我创建了一个默认的MVC 3项目(使用剃刀),以演示一个问题。 在登录页面上,有一行: @Html.TextBoxFor(m = m.UserName) 如果我改变为: @Html.TextBoxFor(m = m.UserName,new { title = "ABC" }) 然后它被渲染为(带有标题属性): input data-val="true" data
我创建了一个默认的MVC 3项目(使用剃刀),以演示一个问题。
在登录页面上,有一行: @Html.TextBoxFor(m => m.UserName) 如果我改变为: @Html.TextBoxFor(m => m.UserName,new { title = "ABC" }) 然后它被渲染为(带有标题属性): <input data-val="true" data-val-required="The User name field is required." id="UserName" name="UserName" title="ABC" type="text" value="" /> 但是,如果我做一个EditorFor: @Html.EditorFor(m => m.UserName,new { title = "ABC" }) 然后它被渲染(没有标题属性): <input class="text-box single-line" data-val="true" data-val-required="The User name field is required." id="UserName" name="UserName" type="text" value="" /> 所以总的来说,当我使用EditorFor时,title属性会丢失。 我知道TextBoxFor的第二个参数被称为htmlAttributes,而对于EditorFor它是additionalViewData,但我已经看到了EditorFor可以渲染这个参数提供的属性的例子。 任何人都可以解释我做错了,我怎么能有一个title属性使用EditorFor? 解决方法
我想我找到一个更好的解决方案。 EditorFor接收additionalViewData作为参数。如果你给它一个名为“htmlAttributes”的参数的属性,那么我们可以做有趣的事情:
@Html.EditorFor(model => model.EmailAddress,new { htmlAttributes = new { @class = "span4",maxlength = 128,required = true,placeholder = "Email Address",title = "A valid email address is required (i.e. user@domain.com)" } }) 在模板(在这种情况下,EmailAddress.cshtml)中,您可以提供一些默认属性: @Html.TextBox("",ViewData.TemplateInfo.FormattedModelValue,Html.MergeHtmlAttributes(new { type = "email" })) 魔法通过这个帮助方法在一起: public static IDictionary<string,object> MergeHtmlAttributes<TModel>(this HtmlHelper<TModel> htmlHelper,object htmlAttributes) { var attributes = htmlHelper.ViewData.ContainsKey("htmlAttributes") ? HtmlHelper.AnonymousObjectToHtmlAttributes(htmlHelper.ViewData["htmlAttributes"]) : new RouteValueDictionary(); if (htmlAttributes != null) { foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(htmlAttributes)) { var key = property.Name.Replace('_','-'); if (!attributes.ContainsKey(key)) { attributes.Add(key,property.GetValue(htmlAttributes)); } } } return attributes; } 当然你可以修改它来渲染属性,如果你正在做原始HTML: public static MvcHtmlString RenderHtmlAttributes<TModel>(this HtmlHelper<TModel> htmlHelper,property.GetValue(htmlAttributes)); } } } return MvcHtmlString.Create(String.Join(" ",attributes.Keys.Select(key => String.Format("{0}="{1}"",key,htmlHelper.Encode(attributes[key]))))); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 在Global.asax方法中将与Autofac注册的组件的相
- asp.net – Visual Studio不识别新类
- 如何在ASP.NET应用程序中使用CSS
- asp.net-mvc – 获取在Identity 2中具有指定角色的用户列表
- asp.net-mvc – 仅为未经过身份验证的用户缓存内容
- ASP.NET MVC 3的jquery ajax表单
- asp.net-mvc-3 – Asp.Net MVC 3自定义WebViewPage在不同的
- asp.net-core – Asp.Net 5 MVC 6 Startup.cs Beta8中的程序
- 企业ASP.NET MVC 3架构大纲
- 一步步开发自己的博客 .NET版(4、文章发布功能)百度编辑
推荐文章
站长推荐
热点阅读