HtmlString MVC 4扩展方法链

时间:2013-08-22 17:58:49

标签: c#-4.0 asp.net-mvc-4

我有一个像这样的扩展方法来创建一个按钮范围:

public static HtmlString Ext1(this HtmlHelper helper, string css)
{
   var tag = new TagBuilder("span");

   tag.AddCssClass(css);
   ...
   return new HtmlString(tag.ToString());
}

我创建了另一个扩展,将属性添加到HtmlString ......就像那样:

public static HtmlString Ext2(this HtmlString helper, string attr)
{
   // need add attr to HtmlString and return
   return new HtmlString(newHtmlGenerated);
}

使用@Html.Ext1("class1").Ext2("1234")应该使用css和attr创建一个范围...

我该怎么做?

由于

1 个答案:

答案 0 :(得分:1)

就像@levelnis所说,你不能从Html创建TagBuilder,你只能从标签名称创建它。您必须使用将Html解析为具体类型的内容,以允许您访问属性。 XDocument会做得很好。尝试将Ext2方法更改为:

public static HtmlString Ext2(this HtmlString helper, string attr)
{
    var doc = XDocument.Parse(helper.ToHtmlString());
    doc.Element(doc.Root.Name).SetAttributeValue("test", attr);
    return new HtmlString(doc.ToString());
}

XDocument位于System.Xml.Linq命名空间中。