11

I have an extension method that needs to return an HtmlString. The method has a loop which will build the HtmlString, however the HtmlString object has no Append method and does not allow concatenation using the + operator so I am not sure how I would build the HtmlString.

I'd like to use the StringBuilder but it doesn't have a ToHtmlString method...

Any solutions or patterns for this?

5
  • 2
    I think you should be able to build a normal stringbuilder with the HTML content and then output it wrapped in an @Html.Raw() call, would this solve the problem? Commented Oct 26, 2011 at 12:44
  • Thanks - that worked great. Will draft an answer with code for this solution. Commented Oct 26, 2011 at 12:52
  • No problem, glad it helped, no point re-inventing the wheel if there's a helper for it! :) Commented Oct 26, 2011 at 14:45
  • I prefer the answer by @swapneel as it leaves the door open for adding a RouteValueDictionary parameter to your extension method and have the relevent tag rendered in a MVC'y way. This applies whether you are rendering a single tag or a whole block of HTML. Commented Oct 26, 2011 at 16:51
  • I am not sure if I get this right so I won't post it as an answer, but how about using your StringBuilder but adding an extension method to StringBuilder ToHtmlString? Commented Feb 27, 2016 at 10:02

5 Answers 5

34

Why not just build the string in a stringbuilder and then

return MvcHtmlString.Create(sb.ToString());
Sign up to request clarification or add additional context in comments.

Comments

12

I think you want to use TagBuilder. See also Using the TagBuilder Class to Build HTML Helpers like this:

// Create tag builder
var builder = new TagBuilder("img");

// Create valid id
builder.GenerateId(id);

// Add attributes
builder.MergeAttribute("src", url);
builder.MergeAttribute("alt", alternateText);
builder.MergeAttributes(new RouteValueDictionary(htmlAttributes));

// Render tag
return builder.ToString(TagRenderMode.SelfClosing);

Comments

1

You could have a look at the fubu spin-off for creating HTML Tags. Here is a SO question that talks a bit about its usage.

Comments

1

You could write the ToHtmlString() method yourself as a extension method on StringBuilder.

Comments

0

There are several solutions to this including using the TagBuilder, but using Html.Raw() worked very well for me:

public static IHtmlString HtmlMethod(this HtmlHelper htmlhelper, Object object)
{
    var sb = new StringBuilder();
    foreach (var item in object)
    {
        sb.Append(object.outputStr)
    }
    return htmlHelper.Raw(sb.ToString());
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.