2

我在 asp.net mvc2 项目中创建了 Html 助手类:

public static class CaptionExtensions
{
    public static string Captions(this HtmlHelper helper, Captions captions)
    {
        var sb = new StringBuilder();
        sb.AppendLine("<ul>");

        foreach (var caption in captions)
        {
            //  var url = Url.Action("CaptionCategory", new {id = caption.Code} )

            sb.AppendLine("<li>");
            sb.AppendLine(  "<a href="+ url + ">");
            sb.AppendLine(      caption);
            sb.AppendLine(  "</a>");
            sb.AppendLine("</li>");
        }

        sb.AppendLine("</ul>");


        return sb.ToString();
    }
}

我需要生成与注释行中的方式类似的 url。注释代码是我在控制器类中的做法,但这是辅助类(静态上下文)。有什么帮助???

4

1 回答 1

5

只需从 HtmlHelper 的 RequestContext 属性中创建一个 UrlHelper 并使用它来生成 url:

var urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
var url = urlHelper.Action("CaptionCategory", new { id = caption.Code });

或者在您的特定情况下,使用 html 帮助程序来生成锚点,而不是像您那样对其进行硬编码:

sb.AppendLine("<li>");
sb.AppendLine(
    helper.ActionLink(
        caption, 
        "CaptionCategory", 
        new { id = caption.Code }
    ).ToHtmlString()
);
sb.AppendLine("</li>");

为此,您显然应该添加using System.Web.Mvc.Html;到文件的顶部,以便将ActionLink扩展方法纳入范围。

于 2011-09-04T14:24:20.650 回答