MVC2:是否有用于原始Html的Html Helper?

5

是否有一个简单地接受和返回原始HTML的HTML助手?而不是做一些丑陋的事情,比如:

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

我希望能做类似于这样的事情:
 <% if (Model.Results.Count > 0) { Html.RawHtml("<h2>Results</h2>") } %>

虽然不算十分简洁,但我认为这样有所改善。类似这样的东西存在吗?或者在使用Html助手输出转义字符内的原始html时,是否有更好的替代方案?


现在我想起来了,如果只使用字面字符串,您将失去智能感知和HTML解析功能。对于上面这样一个简单的示例,这并不是什么大问题,但我猜对于更复杂的HTML可能会有影响。 - Mike Pateras
4个回答

11

5

Response.Write应该可以使用。(虽然这可能有点退步!)您应该能够创建一个扩展方法来执行它。而且,也许您不想使用HTML字符串,而是想在代码中构建标记使用TagBuilder


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());
    }

1

现在有这样的帮助程序:

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

5
仅在 MVC3 中可用,而在 MVC2 中不可用。 - Kim Tranjan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接