Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MVC2中将css类添加到Html.EditorFor_C#_Asp.net Mvc - Fatal编程技术网

C# 在MVC2中将css类添加到Html.EditorFor

C# 在MVC2中将css类添加到Html.EditorFor,c#,asp.net-mvc,C#,Asp.net Mvc,我正在尝试将css类添加到文本框中。这是我的看法: <%: Html.EditorFor(m => m.StartDate) %> m.StartDate)%> 我试着按照这里的说明编写代码: <%: Html.EditorFor(m => m.StartDate, new { @class: "datepicker" }) %> m.StartDate,新的{@class:“datepicker”})%> 但是我得到一个编译器错误,它说: 语法错误,

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

<%: Html.EditorFor(m => m.StartDate) %>
m.StartDate)%>
我试着按照这里的说明编写代码:

<%: Html.EditorFor(m => m.StartDate, new { @class: "datepicker" }) %>
m.StartDate,新的{@class:“datepicker”})%>
但是我得到一个编译器错误,它说:

语法错误,“,”应为


我做错了什么?

EditorFor没有重载,允许您设置HTMLProperty。 (i词典)

此链接说明了如何执行此操作:


我强烈建议使用。这绝对是编辑风格的“正确”方式

您可以通过两种不同的方式告知模型属性使用编辑器模板

第一个(最简单的)是为特定数据类型创建编辑器模板,例如,
DateTime

第二种方法是通过使用

编辑
我还想补充一点,您应该在输入字段中使用“date”类型,这样即使禁用JavaScript,您的用户仍然可以看到本机日期选择器(仅在现代HTML5浏览器上有效)

有了MVC3,我不停地磕头,因为我无法让它工作。我不想仅仅为了添加一个类而创建一个完整的EditorTemplate

好的,不要使用EditorFor,而是使用TextBoxFor,当然,等号如下:

@Html.TextBoxFor(m=> m.ZipCode, new { @class = "zip" })

我想用jQuery是一种快速而肮脏的方法,是吗

$(document).ready(function () {
    $('#StartDate').addClass('datepicker');
});

这里有一个非常简单的解决方案:从
“datepicker”
中删除双引号,然后将它们重新键入Visual Studio,它应该可以工作


我也有同样的问题。我从网上复制/粘贴了示例代码,代码中有一个特殊类型的引号,这导致了
“,”
语法问题。我知道这并不明显。

理想情况下,您应该使用编辑器模板。我通过在MvcHtmlString.Create()中使用编辑器模板解决了这个问题,该模板将允许您重建实际的HTML代码。当然,您需要复制“类”部分中的所有内容,以使编辑器模板尽可能有用

我尝试了上面的许多建议,但最终我还是决定了这一点,因为我认为它不那么复杂,而且它让我可以继续使用编辑器模板:

@MvcHtmlString.Create(Html.EditorFor(m => m.StartDate).ToString().Replace("class=\"text-box single-line\"", "class=\"text-box single-line datepicker\""))

我知道这是一个老问题,但我想我可以贡献自己的力量。我也有同样的问题,希望避免制作编辑器模板。我只是想要一个通用的处理一切的解决方案,允许我在视图中使用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);
    }
}
公共静态类编辑器forextensions
{
公共静态MvcHtmlString编辑器(此HtmlHelper html、表达式、对象htmlAttributes、bool extendAttributes)
{
字符串值=html.EditorFor(expression.ToString();
PropertyInfo[]properties=htmlAttributes.GetType().GetProperties();
foreach(属性中的属性信息)
{
int index=value.ToLower().IndexOf(info.Name.ToLower()+“=”);
如果(指数<0)
value=value.Insert(value.Length-(value.EndsWith(“/>”)2:1),info.Name.ToLower()+“=\”+info.GetValue(htmlAttributes,null)+“\”;
else if(扩展属性)
value=value.Insert(index+info.Name.Length+2,info.GetValue(htmlAttributes,null)+“”);
}
返回MvcHtmlString.Create(值);
}
}
您可以在这样的视图中调用它

<%=Html.EditorFor(m => m.StartDate, new { @class = "datepicker" }, true)%>
m.StartDate,新的{@class=“datepicker”},true)%>

它使用普通的Html.EditorFor方法获取Html字符串,然后注入所需的Html属性。

我正在寻找一种解决方案,将样式应用于@Html.EditorFor helper方法生成的特定框

问题是关于为@HTML.EditorFor设置CSS类,但是对于任何想要为单个元素编辑样式的人来说。。例如,您可以尝试以下方法:

在我的块中,我根据助手生成的ID添加了一个样式:


当javascript关闭时,你的日期选择器可能无论如何都无法工作。人们真的在编写web应用程序时期望在禁用javascript的情况下工作吗?那么,如果用户没有现代浏览器,你该怎么办?说真的,伙计?仔细阅读。你建立你的网站,让它对每个人都有效,然后逐步增强它,使之适合拥有更好/更新浏览器的人。继续并禁用javascript,刷新此页面,然后尝试输入回复。你不能。期望用户启用javascript是合理的,否则某些东西(如日期选择器)将无法工作。在这种情况下,他们仍然可以键入日期。当您需要将数据置于编辑模式时,这不起作用。也就是说,用类似于
[DisplayFormat(DataFormatString=“{0:dd MMMM yyyy}”,ApplyFormatInEditMode=true)]
的东西来装饰您的模型是行不通的。这个问题还有什么解决方案吗?然后有一天,
文本框单行的更新将停止,
,对不起,依靠
Replace()
不是最好的办法如果
文本框单行在将来更新,则解决问题相对简单。我将相应地更新代码。除非有一个使用编辑器模板的选项,并允许我轻松/简单地添加/替换类,否则我不会介意。我很乐意!这就是我来这里的原因。很高兴看到所有这些人都对解决问题提出了很好的建议。嘿,我有个主意!你也可以通过给我惊人的建议/选择来帮助我!除非你更喜欢抨击别人因为那只会
<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)