Как я могу сгенерировать URL из неконтроллерного статического класса в проекте asp.net mvc 2? - PullRequest
2 голосов
/ 04 сентября 2011

Я создал вспомогательный класс Html в проекте asp.net mvc2:

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 Ответ

4 голосов
/ 04 сентября 2011

Просто создайте UrlHelper из свойства RequestContext HtmlHelper и используйте его для генерации 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 в область действия.

...