在MVC 2中将css类添加到Html.EditorFor

时间:2011-01-25 02:45:44

标签: c# asp.net-mvc

我正在尝试将css类添加到文本框中。这就是我的看法:

<%: Html.EditorFor(m => m.StartDate) %>

我尝试按照此link的说明操作我的代码:

<%: Html.EditorFor(m => m.StartDate, new { @class: "datepicker" }) %>

但是我收到编译错误说:

语法错误,','预期

我在这里做错了什么?

8 个答案:

答案 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)

此链接说明了如何操作:

http://aspadvice.com/blogs/kiran/archive/2009/11/29/Adding-html-attributes-support-for-Templates-2D00-ASP.Net-MVC-2.0-Beta_2D00_1.aspx

答案 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复制/粘贴了示例代码,代码有一种特殊类型的引用,导致","语法问题。我知道这真的不明显。