MVC2:原始Html是否有Html Helper?

时间:2010-01-30 22:55:24

标签: html asp.net-mvc-2 html-helper

是否有一个简单接受并返回原始html的Html助手?而不是做这样丑陋的事情:

<% if (Model.Results.Count > 0) { %><h2>Results</h2><% } %>

我想做这样的事情:

 <% if (Model.Results.Count > 0) { Html.RawHtml("<h2>Results</h2>") } %>

不是很清洁,但我认为这有点改善。这样的事情存在吗?或者是否有更好的替代方法从这些转义字符中输出原始html而不是使用Html助手?

4 个答案:

答案 0 :(得分:11)

对于MVC2:

<%: MvcHtmlString.Create("<h2>Results</h2>") %>

在此处找到:

store and display html tags in MVC

答案 1 :(得分:5)

Response.Write应该有效。 (虽然可能有点退后一步!)你应该能够创建一个扩展方法来做到这一点。也许您可能不想使用HTML字符串,而是希望在代码using the TagBuilder中构建标记。

答案 2 :(得分:1)

如果您想使用HtmlHelper进行任何操作,可以返回使用TabBuilder构建的MvcHtmlString

这是我使用的一个例子:

    public static MvcHtmlString AccountsDropDown(this HtmlHelper helper, string name,  object htmlAddributes = null, bool addNull = false, Guid? selected = null)
    {
        Account acc = HttpContext.Current.Session["account"] as Account;

        TagBuilder tb = new TagBuilder("select");

        tb.GenerateId(name);
        tb.Attributes["name"] = name;

        if (addNull)
            tb.InnerHtml += string.Format("<option value= '{0}'> {1} </option>", "", "None");


        Dictionary<Guid, String> accounts;

        if (acc.Master)
            accounts = db.Account.ToDictionary(x => x.Id, x => x.Name);
        else
            accounts = db.Account.Where(x => x.Id == acc.Id).ToDictionary(x => x.Id, x => x.Name);

        foreach (var account in accounts)
            tb.InnerHtml += string.Format(
                "<option value= '{0}' {2}> {1} </option>", 
                account.Key, 
                account.Value,
                selected == account.Key ? " selected='selected' " : ""
            );

        return new MvcHtmlString(tb.ToString());
    }

答案 3 :(得分:0)

现在有这样的帮手:

Html.Raw("<h2>Results</h2>")