Question

Is there a generic Html.Element?

I would like to be able to do this:

Html.Element<AccountController>("IFrame", "elementName", new { src = c => c.ChangePassword })
Was it helpful?

Solution

The most appropriate, "MVC-ish" approach to build HTML content the way you're describing is to create a custom HtmlHelper extension method. This method ought to make use an instance of System.Web.Mvc.TagBuilder to construct the HTML. Here's an example (copied from one of my current projects, but not actually tested in isolation):

using System.Web.Mvc;
using System.Linq;

public static class HtmlHelperExtensions
{
    public static string Element(this HtmlHelper htmlHelper, string tag, string name, object htmlAttributes)
    {
        TagBuilder builder = new TagBuilder(tag);

        builder.GenerateId(name);
        builder.MergeAttributes(htmlAttributes);
        // use builder.AddCssClass(...) to specify CSS class names

        return builder.ToString()
    }
}

// example of using the custom HtmlHelper extension method from within a view:
<%=Html.Element("iframe", "elementName", new { src = "[action url here]" })%>

As for extending your custom HtmlHelper method to support the controller action lambda, this post is a good place to start.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top