【问题标题】:How can I generate url from non-controller static class in asp.net mvc 2 project?如何从 asp.net mvc 2 项目中的非控制器静态类生成 url?
【发布时间】:2011-09-04 14:22:54
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 非常感谢,这正是我需要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多