Как я могу генерировать URL из неконтроллерного статического класса в проекте asp.net mvc 2?
Я создал вспомогательный класс 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 ответ
Решение
Просто создайте 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
метод расширения в область.