【问题标题】:TagBuilder add attribute without valueTagBuilder 添加没有值的属性
【发布时间】:2015-02-26 08:35:37
【问题描述】:

来自这里的相同问题。

How to add attribute without value

这一次,我想创建一个带有 AngularJS 属性的输入,将其用作指令。

这就是我想要的:

<input ng-angular-abc />

这是 TagBuilder 生成的:

<input ng-angular-abc=""/>

我已经试过了,但没有任何效果:

tagBuilder.MergeAttribute("ng-angular-abc", "");
tagBuilder.MergeAttribute("ng-angular-abc", null);
tagBuilder.MergeAttribute("ng-angular-abc", "ng-angular-abc");

【问题讨论】:

  • ng-angular-abc=""ng-angular-abc 是相同的。使用空值时,角度没有任何问题。我使用了一段时间的角度,并没有遇到任何差异。
  • 在我的指令中,我检查 attrs 并查看值是否已定义。用ng-angular-abc,值未定义,用ng-angular-abc="",值为空,工作不正常。
  • 看来问题出在您的指令上......我会解决这个问题而不是尝试更改 MVC(这样做是因为所有这些东西都是等效的)。如果你真的下定了决心,你可以继承自 TagBuilder 并覆盖MergeAttribute

标签: c# asp.net-mvc angularjs razor tagbuilder


【解决方案1】:

这并不完全是您所需要的,但您可以创建一个辅助方法来生成标签 -

namespace YourNamespace
{
    public static class CustomHelpers
    {
        public static MvcHtmlString TextboxWithProperty(this HtmlHelper html, string property)
        {
            StringBuilder result = new StringBuilder();
            result.AppendFormat("<input {0} />", property);
            return MvcHtmlString.Create(result.ToString());
        }
    }
}

并在你的视图中调用它 -

@using YourNamespace
...
...
...
@Html.TextboxWithProperty("ng-angular-abc")

【讨论】:

  • 不完全是我想要的,自己创建一个助手是太多的工作。我只是想重用或配置现有的标签生成器。
  • HtmlTextWriter 似乎也没有这个选项。
【解决方案2】:

另一种方法是使用 Razor 助手在 App_Code 目录中创建 Helpers.cshtml 文件。你的助手会喜欢这个

@helper InputNg() {
    <input ng-angular-abc />
}

要在 razor 视图中访问帮助程序,只需使用文件名和方法,如下所示:

@Helpers.InputNg()

它使您可以更好地控制 HTML。

【讨论】:

    猜你喜欢
    • 2017-02-04
    • 2015-05-20
    • 2019-11-28
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    相关资源
    最近更新 更多