- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我创建了一个默认的 MVC 3 项目(使用 razor),以演示问题。
在登录页面上,有一行:
@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时,标题属性丢失了。
我知道 TextBoxFor 的第二个参数称为 htmlAttributes,EditorFor 的第二个参数称为 extraViewData,但是我见过一些示例,其中 EditorFor 可以呈现随此参数提供的属性。
谁能解释一下我做错了什么,以及如何在使用 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, 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 MvcHtmlString.Create(String.Join(" ",
attributes.Keys.Select(key =>
String.Format("{0}=\"{1}\"", key, htmlHelper.Encode(attributes[key])))));
}
关于asp.net-mvc-3 - TextBoxFor 与 EditorFor、htmlAttributes 与additionalViewData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6347722/
我正在使用Disable autocomplete on html helper textbox in MVC将文本框上的自动完成功能添加为“关闭”: public static MvcHtm
我使用的是 MVC 5,我正在尝试编写一些 Bootstrap 扩展方法。我的目标是用 Html.BootstrapLinkButton“覆盖”Html.ActionLink 方法。 Bootst
我正在做扩展。 public static MvcHtmlString Image(this HtmlHelper helper, string src, object htmlAttributes
我有一个自定义帮助程序类来突出显示所选的菜单项, @Html.MenuLink("Contact000", "Contact", "Home", new { @class = "nav-li
我知道我可以通过执行以下操作将 html 属性添加到我的标签中: var htmlAttributes = new RouteValueDictionary { { "data-foo", "bar"
假设我有一个组件接口(interface),它应该扩展标准 的接口(interface)。元素。写这个有什么区别: interface ComponentProps extends React.De
我有一个自定义助手,我在其中接收 htmlAttributes 作为参数: public static MvcHtmlString Campo( this HtmlHelper
我为 currency 浮点格式创建了一个编辑器模板。 @using System.Globalization @{ var ri = new RegionInfo(System.Thread
我正在使用 RouteValueDictionary 将 RouteValues 传递给 ActionLink: 如果我编码: 链接结果正常: SearchArticles?refSearch=2&
我正在尝试创建 Html.ActionLink(...) HtmlHelper 的简单自定义版本 我想向传入的 htmlAttributes 匿名对象附加一组额外的属性。 public static
在 C# 中使用 Html Agility Pack 我有一个要添加属性的节点。 当前节点是一个没有属性的元素,我想向它添加一个“事件”类。 看起来最好使用的是 node.Attributes.Add
使用 HTML Helper 时,根据条件设置属性的最佳方法是什么。例如 m.FirstName, new {@class='contactDetails'}%> m.FirstName, n
在 asp.net mvc 中,我总是看到内置的 html 助手,它们总是有对象 htmlAttirbutes。 然后我通常会做新的{@id = "test", @class="myClass"}。
我正在尝试使用 EditorFor 自定义模板。 我想创建一个 Int32 和十进制模板来通过一些验证来呈现输入。 这就是我正在尝试的 @model int? @Html.TextBoxFor(mod
这有效 Edit 但事实并非如此。为什么? @Html.ActionLink("Edit", "edit", "markets", new { id = 1 }, new {@class="ui-bt
@Html.TextAreaFor(model => model.DESCRIPTION, 20, 50, new { htmlAttributes = new { @class = "form-co
我正在尝试使用一个自定义助手,它使用在 Is there an ASP.NET MVC HtmlHelper for image links? 中找到的示例创建链接. 继续假设此代码实际运行,我不确定
我已经为我的每个树节点分配了一个 ID 属性,以保留我在 Controller 上需要的信息,以便我可以保存修改后的层次结构。 但是,当我删除一个节点时,Id 属性将被删除。我不确定这是否是一个错误,
我在 TextBoxFor 调用中使用了 CSS 样式 display: none,但它不起作用。 @Html.TextBoxFor(m => m.dP, new { htmlAttributes
@Html.RadioButtonFor(Model => Model.Location, "Location") @Html.LabelFor(Model=>Model.Location,"
我是一名优秀的程序员,十分优秀!