3

我正在尝试构建一个组合标签:

第一个标签:<span class="requiredInidicator">* </span> 第二个标签:(<label>SomeText</label>为简洁起见,属性被剪掉了)

我想将这些组合起来返回一个 MVCHtmlString 但下面的代码完全忽略了跨度。有人可以指出我做错了什么

这是我的代码:

// Create the Label
var tagBuilder = new TagBuilder("label");
tagBuilder.Attributes.Add("id", "required" + id);
//I get the id earlier fyi - not pertinent fyi for this question )

// Create the Span
var required = new TagBuilder("span");
required.AddCssClass("requiredInidicator"); 
required.SetInnerText("* ");

//Now combine the span's content with the label tag
tagBuilder.InnerHtml += required.ToString(TagRenderMode.Normal);
tagBuilder.SetInnerText(labelText);
var tag = MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.Normal));
return tag;

创建标签时,将完全忽略跨度。当我在调试期间检查标签时,它并不关心我通过附加的要求.InnerHtml+=

有什么明显的我做错了吗?

4

5 回答 5

7

试试这样:

var label = new TagBuilder("label");
label.Attributes.Add("id", "required" + id);
//I get the id earlier fyi - not pertinent fyi for this question )

// Create the Span
var span = new TagBuilder("span");
span.AddCssClass("requiredInidicator");
span.SetInnerText("* ");

//Now combine the span's content with the label tag
label.InnerHtml = span.ToString(TagRenderMode.Normal) + htmlHelper.Encode(labelText);
return MvcHtmlString.Create(label.ToString(TagRenderMode.Normal));
于 2012-12-06T15:35:55.520 回答
3

您不应该打电话SetInnertext(尤其是在刚刚分配之后Innerhtml)。您想使用其中一个。

如果您要追加,请继续使用InnerHtml += labeltext.

于 2012-12-06T15:32:44.457 回答
2

你总是可以这样做:

string output = "";
output += tabBuilder.ToString(TagRenderMode.Normal);
output += required.ToString(TagRenderMode.Normal);

return MvcHtmlString.Create(output);

问题可能是 TagBuilder 假定一个根级别的 HTML 标记,但我不确定。

于 2012-12-06T15:31:34.913 回答
2

这个怎么样:

tagBuilder.SetInnerText(labelText + required.ToString(TagRenderMode.Normal));
于 2012-12-06T15:32:57.483 回答
1

尝试在跨度上使用 InneHtml 属性

// Create the Span
var required = new TagBuilder("span");
required.InnerHtml ("SOME TEXT");
于 2012-12-06T15:33:56.790 回答