如何在asp.net mvc 2项目中从非控制器静态类生成url?

时间:2011-09-04 14:22:54

标签: c# asp.net-mvc-2 html-helper routevalues url-action

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

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。注释代码是我在控制器类中的方式,但这是辅助类(静态上下文)。任何帮助???

1 个答案:

答案 0 :(得分:4)

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

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扩展方法纳入范围。