标签: tagbuilder

为什么使用TagBuilder而不是StringBuilder?

使用标记生成器和字符串生成器在htmlhelper类中创建表或使用HtmlTable有什么区别?

他们不是生成同样的事情吗?

c# asp.net-mvc stringbuilder extension-methods tagbuilder

40
推荐指数
4
解决办法
2万
查看次数

嵌套TagBuilder -as TagBuilderTree-

TagBuilder是构建HTML元素的一个很好的实现.但是-some-HTML元素可以有另一个元素(我称之为子元素).我找不到Mvc课程的任何课程.

题; 我应该实现几个支持嵌套标签的类(TagBuilderTree和TagBuilderNode),还是我错过了什么?

asp.net-mvc tagbuilder razor

26
推荐指数
2
解决办法
2万
查看次数

TagBuilder.MergeAttributes不起作用

我在MVC中创建自己的帮助器.但HTML中未添加自定义属性:

帮手

public static MvcHtmlString MenuItem(this HtmlHelper helper, string linkText, string actionName, string controllerName, object htmlAttributes)
{
    var currentControllerName = (string)helper.ViewContext.RouteData.Values["controller"];
    var currentActionName = (string)helper.ViewContext.RouteData.Values["action"];

    var builder = new TagBuilder("li");

    if (currentControllerName.Equals(controllerName, StringComparison.CurrentCultureIgnoreCase)
        && currentActionName.Equals(actionName, StringComparison.CurrentCultureIgnoreCase))
        builder.AddCssClass("selected");

    if (htmlAttributes != null)
    {
        var attributes = new RouteValueDictionary(htmlAttributes);
        builder.MergeAttributes(attributes, false); //DONT WORK!!!
    }

    builder.InnerHtml = helper.ActionLink(linkText, actionName, controllerName).ToHtmlString();
    return MvcHtmlString.Create(builder.ToString(TagRenderMode.Normal));
}
Run Code Online (Sandbox Code Playgroud)

CSHTML

@Html.MenuItem("nossa igreja2", "Index", "Home", new { @class = "gradient-top" })
Run Code Online (Sandbox Code Playgroud)

最终结果(HTML)

<li class="selected"><a href="/">nossa igreja2</a></li>
Run Code Online (Sandbox Code Playgroud)

请注意,它没有添加gradient-top我在helper调用中提到的类.

html c# asp.net-mvc tagbuilder

6
推荐指数
1
解决办法
4413
查看次数

你能控制TagBuilder类呈现属性的顺序吗?

我知道这是一种痴迷,但有没有办法控制TagBuilder类在调用时呈现HTML标记属性的顺序ToString()

就是这样

var tb = new TagBuilder("meta");            
tb.Attributes.Add("http-equiv", "Content-Type");            
tb.Attributes.Add("content", "text/html; charset=utf-8");    
tb.ToString(TagRenderMode.SelfClosing)
Run Code Online (Sandbox Code Playgroud)

将返回

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Run Code Online (Sandbox Code Playgroud)

<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
Run Code Online (Sandbox Code Playgroud)

更改添加属性的顺序不会更改它,它似乎按字母顺序呈现

c# asp.net tagbuilder

5
推荐指数
1
解决办法
1193
查看次数

Html.ActionLink 扩展

我正在尝试扩展 Html.ActionLink,因为我想为共享组件(在本例中为模态)添加自定义元数据。

我的目标是进一步扩展 .Net MVC 中的 LinkExtensions 类,它将向 html 类属性添加一个值并添加一个自定义数据属性,结果如下:

<a href="/Controller/Action/id" class="show-in-modal style1 style2" data-title="Modal title">Link</a>
Run Code Online (Sandbox Code Playgroud)

帮助器看起来类似于 MVC 方法:

public static MvcHtmlString ModalLink(this HtmlHelper htmlHelper, string title, string linkText, string actionName, string controllerName, object routeValues, object htmlAttributes)
{
    // Add 'show-in-modal' class here
    // Add 'data-title' attribute here

    return htmlHelper.ActionLink(linkText, actionName, controllerName, routeValues, htmlAttributes);
}

@Html.ModalLink("Modal title", "Link", "action", "controller", new { id = "id" }, new { @class = "style1 style2" });
Run Code Online (Sandbox Code Playgroud)

我遇到的这个问题是我无法轻松修改 htmlAttributes 对象以添加我的类名和数据属性,这是有道理的,因为这是一个只读的匿名对象。

有没有一种方法可以轻松应用所需的值/元数据,而不必通过反射将所有内容分开并重新组合在一起?

我注意到 MVC …

c# asp.net-mvc html-helper tagbuilder razor

5
推荐指数
1
解决办法
2103
查看次数

ASP.NET MVC中string.Format和TagBuilder之间有什么区别?

我的ASP.NET MVC应用程序有一个Html Helper文件.他们中的大多数只返回一个格式化的字符串.

以下是我的一个格式化字符串助手的示例:

public static string Label(this HtmlHelper helper, string @for, string text)
{
    return string.Format("<label for \"{0}\">{1}</label>", @for, text);
}
Run Code Online (Sandbox Code Playgroud)

这是一个TagBuilder版本,它给出了与上面相同的结果:

public static string Label(this HtmlHelper helper, string @for, string text)
{
    var builder = new TagBuilder("label");
    builder.Attributes.Add("for", @for);
    builder.SetInnerText(text);
    return builder.ToString(TagRenderMode.Normal);
}
Run Code Online (Sandbox Code Playgroud)

现在,我已经从混合实现中读取/学习MVC的一些站点.有些人使用这种TagBuilder方法,有些人则使用string.Format(),有些人则互换使用.

标签标签相当简单,那么返回格式化的字符串而不是实例化TagBuilder像这样的标签的类是"更好" 吗?

我不一定担心性能,我只是好奇为什么有些人选择TagBuilder而其他人使用格式化的字符串.

谢谢你的启示!

c# asp.net-mvc html-helper tagbuilder

4
推荐指数
1
解决办法
1344
查看次数

何时使用 MergeAttribute 而不是 Attributes.Add

使用 TagBuilder 时,可以使用TagBuilder.Attributes.Add(..)TagBuilder. MergeAttribute(..)向正在构建的 HTML 元素添加属性:

TagBuilder formBuilder = new TagBuilder("form");
formBuilder.Attributes.Add("method", "get");
formBuilder.Attributes.Add("action", url);

TagBuilder buttonBuilder = new TagBuilder("input");
buttonBuilder.MergeAttribute("type", "submit");
buttonBuilder.MergeAttribute("value", buttonText);
Run Code Online (Sandbox Code Playgroud)

但这两者有什么不同,我什么时候应该选择其中一种而不是另一种呢?

c# tagbuilder asp.net-mvc-3

3
推荐指数
1
解决办法
3340
查看次数

如何加载partialview并将其存储在要在javascript中使用的变量中?

我有一个使用模型创建下拉列表的prtialview。在我的主视图中,我创建了partialview html字符串,以便稍后在javascript函数中使用它。

视图:

@model SomeViewModel
@{ 
var devicesDropDown = @Html.Partial("_DropDown", (SelectList)(Model.DeviceTypes));
var devicesHtmlDropDown = MvcHtmlString.Create(devicesDropDown.ToString());
}
Run Code Online (Sandbox Code Playgroud)

但是,当我想以这种方式在javascript中使用它时,它就像是导致javascript函数出错的未连接字符串。

js函数位于页面的底部:

<script type="text/javascript">
   function format(d) {
       var ddl = '@( devicesHtmlDropDown)';
       return ddl;
   }
</script>
Run Code Online (Sandbox Code Playgroud)

这是运行时字符串的样子:

 var ddl = '<select class="form-control input" id="SelectedValue"  name="SelectedValue" style="width: 100%">
<option selected="selected" value="456413">1</option>
<option value="564655465">2</option>
</select>
';
Run Code Online (Sandbox Code Playgroud)

我应该如何格式化此字符串以使其可以像静态html对象一样呈现。以及如何检索此下拉菜单的选定值以发布到操作?我应该使用TagBuilder吗?

javascript asp.net-mvc partial-views tagbuilder mvchtmlstring

3
推荐指数
1
解决办法
1160
查看次数

ASP.NET MVC TagBuilder.SetInnerText()未正确设置文本

所以我正在创建一个HtmlHelper扩展方法,并且在使用TagBuilder.SetInnerText()时遇到了问题.助手输出选项标签.这是助手的来源:

public static string Option(this HtmlHelper helper, string value, string text, object htmlAttributes) {
        TagBuilder tagBuilder = new TagBuilder("option");

        tagBuilder.MergeAttributes(new RouteValueDictionary(htmlAttributes));
        tagBuilder.MergeAttribute("value", value);
        tagBuilder.SetInnerText(text);

        return tagBuilder.ToString(TagRenderMode.SelfClosing);
    }
Run Code Online (Sandbox Code Playgroud)

在我看来,我打电话

<%= Html.Option("value", "text", new { }) %>
Run Code Online (Sandbox Code Playgroud)

但标签的内部文本没有设置,我留下了

<option value="value"> </option>
Run Code Online (Sandbox Code Playgroud)

关于为什么SetInnerText()没有正确设置文本的任何想法?

谢谢.

c# asp.net-mvc tagbuilder

2
推荐指数
1
解决办法
4342
查看次数

TagBuilder中的内部ToMVCHmlString

我希望在我自己的程序集中编写一些帮助程序,模仿System.web.mvc中的帮助程序.我的问题是我无法使用对Tagbuilder.ToMvcHtlString的调用,因为它是内部的.因此,如果我返回一个字符串,它就不会为asp.net 4做好准备.

我不想添加任何东西到system.web.mvc,因为这是一个给定的DLL.

asp.net asp.net-mvc html-helper tagbuilder

2
推荐指数
1
解决办法
254
查看次数