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

本文关键字:mvc net 项目 url asp 静态类 控制器 | 更新日期: 2023-09-27 18:07:48

我在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类似的方式在注释行。注释代码是我如何在控制器类中做到这一点,但这是助手类(静态上下文)。任何帮助吗?

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

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