asp.net-mvc-3 – TextBoxFor vs EditorFor,和htmlAttributes vs a
发布时间:2020-05-23 05:33:23 所属栏目:asp.Net 来源:互联网
导读:我创建了一个默认的MVC 3项目(使用剃刀),以演示一个问题。 在登录页面上,有一行: @Html.TextBoxFor(m = m.UserName) 如果我改变为: @Html.TextBoxFor(m = m.UserName, new { title = ABC }) 然后它被渲染为(带有标题属性): input data-val=true data-val
|
我创建了一个默认的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控件属性与[Flags]枚举
- asp.net – 可以使用URI模板来匹配URI到路由吗?
- asp.net-mvc – 使用WCF/OData作为访问层而不是直接使用EF/
- 为什么调试器不会在我的ASP.NET应用程序的断点处停止?
- asp.net-mvc – ASP.NET MVC应用程序中的“坏二进制签名”
- asp.net-mvc – MVC3:当我想从控制器访问模型数据时,无法为
- asp.net-mvc-3 – mvc是否支持整个区域的Web.config设置继承
- 我需要知道什么才能使asp.net应用程序全球化?
- 在ASP.Net的URL中检索锚点链接
- asp.net – 将我的网站与BlogEngine.Net集成
推荐文章
站长推荐
- asp.net – UpdatePanel中的DropDownList
- asp.net-mvc – 如何在@ Html.TextBox mvc4中添加
- asp.net-mvc-3 – 当不需要/需要使用AntiForgery
- asp.net – 如何在CORS中解决’预检无效(重定向)
- asp.net – Visual Studio 2015 Web应用程序.NET
- asp.net – UserControl Viewstate在回发后丢失所
- asp.net – 避免在web.config中提供服务器连接字
- asp.net-mvc-3 – “区域”文件夹中的样式,脚本和
- asp.net-core – 如何使用.net Core设置离线开发
- ASP.net会话cookie丢失或删除
热点阅读
