Asp.net mvc 将JQueryUI主题应用于MVC渲染控件

Asp.net mvc 将JQueryUI主题应用于MVC渲染控件,asp.net-mvc,jquery-ui,Asp.net Mvc,Jquery Ui,在我的MVC3应用程序中,我有以下JavaScript,它接受所有textbox控件和使用.text box.single line类呈现的所有控件,并添加ui小部件内容的类,以使站点具有与我的主题一致的外观 $('.text-box.single-line, textarea').not('.input-validation-error').addClass('ui-widget-content'); 尽管这样做有效,但它似乎效率低下(在加载DOM后添加类),并且会导致页面“闪烁”(尤其是在

在我的MVC3应用程序中,我有以下JavaScript,它接受所有
textbox
控件和使用
.text box.single line
类呈现的所有控件,并添加
ui小部件内容的类
,以使站点具有与我的主题一致的外观

$('.text-box.single-line, textarea').not('.input-validation-error').addClass('ui-widget-content');
尽管这样做有效,但它似乎效率低下(在加载DOM后添加类),并且会导致页面“闪烁”(尤其是在FireFox中)

我读过很多关于这个话题的文章,但似乎找不到一个简洁明了的解决方案。我知道下面是一些选项,但是没有一个看起来像MVC应该的那样干净

  • 我可以使用
    new{@class=“text box single-line ui widget content”}
    htmlAttribute将所有EditorFor方法更改为TextBoxFor,但同样,这不是很干净,需要对使用EditorFor的控件进行数百次更改
  • 我可以创建一个编辑器模板,以某种方式为每种数据类型添加
    ui小部件内容
    类,但这似乎有些过分
  • 我考虑在一个定制的HtmlHelper类中创建我自己的EditorFor、TextBoxFor等方法,该类将覆盖添加
    ui小部件内容的现有方法。我认为这将是最干净的解决方案,但我读到不建议重写扩展方法。(来源:)
  • 我想告诉“文本框”类的CSS文件简单地添加另一个CSS类,但我认为这是不可能的(您只能向一个类而不是另一个类添加样式)

  • 有没有其他选项可以让我轻松地将JQuery UI主题应用于现有MVC控件?

    我认为#2是最干净的选项…一个编辑器模板将适当地设置所有控件的样式。我认为这一点也不过分。谢谢Ethan,但我不需要为所有基本类型(字符串、Int、Decimal等)创建编辑器模板吗?如果您愿意使用
    UIHint
    注释,则不一定。例如,如果在视图模型中有一个字段
    Foo
    ,则可以使用
    [UIHint(“MyEditor”)]public int Foo{get;set;}
    ,只需确保调用编辑器模板
    MyEditor
    。当然,对于要使用该编辑器的每个字段,您都必须使用该注释,因此它可能无法满足您的需要……另一个选项可能是创建自定义操作过滤器,以添加具有自定义行为的类。与此类似:。但我的建议是创建新的方法(即ThemeEditorFor),用添加的类调用预先存在的扩展方法。然后重构,将来可以通过HtmlHelper扩展生成主题元素或非主题元素。