gpt4 book ai didi

c# - 如何将 css 类注入(inject) MvcHtmlString?

转载 作者:技术小花猫 更新时间:2023-10-29 11:23:09 28 4
gpt4 key购买 nike

是否可以将 css 类注入(inject)到封装在 MvcHtmlString 中的 HTML 元素中? ?

作为我正在构建的框架的一部分,我的任务是为表单元素(TextBoxTextBoxFor<> 等)创建我自己的 MVC 扩展方法版本,并注意以下事项:

  • 他们必须创建正确的 HTML 标记,包括 CSS 类,以匹配已经为网站设计的样式。在大多数情况下,这只是意味着添加一个特定的类。
  • 它们必须尽可能符合 MVC 扩展方法,这样开发人员才能放心地使用它们

大多数(如果不是全部的话)MVC 扩展方法返回 MvcHtmlString。所以模仿功能的最简单方法是直接从我的方法中调用这些方法。我有自己的 Html Helper,OuHelper ,我的框架正在使用,所以开发人员希望创建,例如,一个 TextBox ,会按照以下方式调用:

`@Ou.TextBoxFor(m => m.Username)

我希望生成的 Html 像这样呈现:

<input type="text" name="Username" id="Username" class="int-text" />

如果我创建自己的重载版本,就像它们在 MVC 框架中一样,我将能够控制在需要的地方添加额外的 CSS 类,但是对于这些方法的 HTML 输出的如此小的更改,这似乎有点过分了。我需要提供所有重载的等效实现(仅对于 TextBox,当您计算通用和非通用版本时,大约有 12 个)。我想做的是 TagBuilder相反(从输出开始并从中创建一个对象,使 MergeAttributes 之类的东西可用)但我认为这是不可能的。

需要明确的是:我正在编写的框架代码本身需要添加 css 类,但是使用我创建的扩展方法的开发人员也应该可以添加他们自己的自定义 css 类。这些将根据标准 MVC 框架表单扩展方法的功能添加/附加

最佳答案

您目前的系统似乎还不错。您不能注入(inject)/覆盖 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)

关于c# - 如何将 css 类注入(inject) MvcHtmlString?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15831779/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com