我正在尝试将css类添加到文本框中。这就是我的看法:
<%: Html.EditorFor(m => m.StartDate) %>
我尝试按照此link的说明操作我的代码:
<%: Html.EditorFor(m => m.StartDate, new { @class: "datepicker" }) %>
但是我收到编译错误说:
语法错误,','预期
我在这里做错了什么?
答案 0 :(得分:78)
对于MVC3,我不停地敲打头,因为我无法使用它。我不想创建一个完整的EditorTemplate来添加一个类。
好吧,不要使用EditorFor,而是使用 TextBoxFor ,当然等号是这样的:
@Html.TextBoxFor(m=> m.ZipCode, new { @class = "zip" })
答案 1 :(得分:24)
我强烈建议使用Editor Templates。这绝对是为您的EditorFor设计样式的“正确”方式。
您可以通过两种不同的方式告诉模型属性使用编辑器模板。
第一个(最简单的)是为特定数据类型创建编辑器模板 - 例如DateTime
。
第二种方法是使用UIHint在DataAnnotations中以声明方式设置它。
修改强>
我还想补充一点,您应该在输入字段中使用“日期”类型,以便即使禁用JavaScript,您的用户仍然可以看到本机日期选择器(仅在现代HTML5浏览器上有效)
<input id="meeting" type="date" value="2011-01-13"/>
答案 2 :(得分:5)
我想快速而肮脏的方法是在jQuery中,是吗?
$(document).ready(function () {
$('#StartDate').addClass('datepicker');
});
答案 3 :(得分:4)
理想情况下,您应该使用编辑器模板。我通过在MvcHtmlString.Create()中使用编辑器模板解决了这个问题,它可以让你重建实际的HTML代码。当然,您需要复制“类”部分中的所有内容,以使编辑器模板尽可能有用。
我尝试了上面的许多建议,但最终,我确定了这一点,因为我认为它不那么复杂,它让我继续使用编辑器模板:
@MvcHtmlString.Create(Html.EditorFor(m => m.StartDate).ToString().Replace("class=\"text-box single-line\"", "class=\"text-box single-line datepicker\""))
答案 4 :(得分:3)
EditorFor没有重载允许您设置HtmlProperties。 (IDictionary htmlAttributes)
此链接说明了如何操作:
答案 5 :(得分:3)
我知道这是一个古老的问题,但我想我可以做出贡献,所以这里有。我有同样的问题,并希望避免制作编辑器模板。我只想要一个通用的句柄,它允许我在视图中使用Html.EditorFor时指定html属性。
我真的很喜欢CIA的答案,但我对它进行了一些扩展,以便你可以传递你需要的任何属性。我创建了一个额外的Html.EditorFor方法,它接受html属性: -
public static class EditorForExtentions
{
public static MvcHtmlString EditorFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, Object htmlAttributes, bool extendAttributes)
{
string value = html.EditorFor(expression).ToString();
PropertyInfo[] properties = htmlAttributes.GetType().GetProperties();
foreach (PropertyInfo info in properties)
{
int index = value.ToLower().IndexOf(info.Name.ToLower() + "=");
if (index < 0)
value = value.Insert(value.Length - (value.EndsWith("/>") ? 2 : 1), info.Name.ToLower() + "=\"" + info.GetValue(htmlAttributes, null) + "\"");
else if (extendAttributes)
value = value.Insert(index + info.Name.Length + 2, info.GetValue(htmlAttributes, null) + " ");
}
return MvcHtmlString.Create(value);
}
}
你可以在像这样的视图中调用它
<%=Html.EditorFor(m => m.StartDate, new { @class = "datepicker" }, true)%>
它使用普通的Html.EditorFor方法获取html字符串,然后注入所需的html属性。
答案 6 :(得分:1)
我一直在寻找一种解决方案,将样式应用于@ HTML.EditorFor辅助方法生成的特定框。
问题是关于为@HTML.EditorFor设置CSS类,但为想要编辑单个元素 的样式的人设置..例如,您可以试试这个:
在我的块中,我添加了一个基于帮助程序生成的ID的样式: ..
<style>
#EnrollmentInfo_Format
{
width:50px;
font: normal 100% 'Lucida Grande',Tahoma,sans-serif;
font-size: 11px;
color: #2e6e9e;
}
</style>
然后在我的页面中(我在局部视图中这样做):
@Html.EditorFor(e => e.EnrollmentInfo.Format)
答案 7 :(得分:-3)
这是一个非常简单的解决方案:从"datepicker"
中删除双引号并将它们重新键入Visual Studio,它应该可以正常工作。
我遇到了同样的问题。我从Web复制/粘贴了示例代码,代码有一种特殊类型的引用,导致","
语法问题。我知道这真的不明显。