是否可以将css类注入已封装在MvcHtmlString
中的HTML元素?
作为我正在构建的框架的一部分,我的任务是为表单元素(TextBox
,TextBoxFor<>
等)创建自己的MVC扩展方法版本,以下警告:
大多数(如果不是全部)MVC扩展方法返回MvcHtmlString
,因此模仿功能的最简单方法是直接从我的方法调用这些方法。我有自己的Html Helper OuHelper
,我的框架正在使用,所以希望创建一个TextBox
的开发人员可以调用以下内容:
`@Ou.TextBoxFor(m =&gt; m.Username)
我希望生成的Html像这样呈现:
<input type="text" name="Username" id="Username" class="int-text" />
如果我在MVC框架中创建我自己的重载版本,我将能够控制在需要的地方添加额外的CSS类,但是对于这些方法的HTML输出的这么小的改变来说似乎有些过分。我需要提供所有重载的等效实现(仅对于TextBox
,当计算泛型和非泛型版本时,大约有12个)。我想做的是反向TagBuilder
(从输出开始并从中创建一个对象,使MergeAttributes
之类的东西可用)但我不认为这是可能的。
要明确:我正在编写的框架代码需要自己添加css类,但是使用我创建的扩展方法的开发人员也可以添加自己的自定义css类。这些将根据标准MVC框架表单扩展方法的功能
添加/附加答案 0 :(得分:3)
你现在似乎有一个非常好的系统。您不能注入/覆盖HtmlHelper类的默认样式,如果需要,可以查看HtmlHelper
's input extensions here的源代码。
我能想到的另一种方法是使用扩展方法,就像在实际的ASP.NET源代码中完成它一样。这是一个例子,函数的名称可以是你想要的任何东西,但它必须与TextBoxFor
不同,因为它具有相同的参数列表。
public static class HtmlHelperExtensions
{
public static MvcHtmlString IntTextFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
{
return htmlHelper.TextBoxFor(expression, new { @class = "int-text" });
}
}
用法就像常规MVC一样只包含扩展方法的命名空间。
@using MyProject.Helpers;
@Html.IntTextFor(e => e.Age)
答案 1 :(得分:0)
你可以这样做
@Ou.TextBoxFor(m => m.Username,new{@Class="your class Name"})
或 内联样式
@Ou.TextBoxFor(m => m.Username,new{@style="font-size:10px"})