Можно ли использовать Html Helpers за пределами страницы Razor - PullRequest
3 голосов
/ 01 августа 2011

У меня есть класс IncomeStatement, который используется как ViewModel. У этого класса есть свойство, которое генерирует довольно сложный html, такой как:

public MvcHtmlString HtmlPeriods { get; set; }
.... 
StringBuilder htmlPeriods = new StringBuilder(100);
htmlPeriods.AppendFormat(
"<td><a href='/Forecast/IndexPeriod?Period={1}'>{0}</a></td>",
    inc.NetSales, per.Period.PeriodID);
....
HtmlPeriods = MvcHtmlString.Create(htmlPeriods.ToString())

Затем в файле Razor я использую свойство HtmlPeriods, которое прекрасно работает:

<th></th>@Model.HtmlPeriods<td></td>

Но что, если я захочу использовать Html.ActionLink (...) в своем классе для создания
хороших Razor-подобных ссылок, как то так:

string forecastLink = 
Html.ActionLink("Edit Forecast", "/Forecast/IndexEdit?PeriodID=2005Q1");

Как бы я это сделал?

Ответы [ 2 ]

4 голосов
/ 01 августа 2011

Вы можете использовать класс HtmlHelper , чтобы сделать это. Я думаю, вам нужен метод GenerateLink .

Пример:

string link = HtmlHelper.GenerateLink(HttpContext.Current.Request.RequestContext, System.Web.Routing.RouteTable.Routes, "My link", "Default", "Index", "Home", null, null);
0 голосов
/ 01 августа 2011

В вашей ситуации было бы правильнее определять помощники HTML вместо использования свойств и методов в ваших моделях. Например:

using System.Web.Mvc;
using System.Web.Mvc.Html;

public static class HtmlExtensions
{
    public static MvcHtmlString HtmlPeriods(this HtmlHelper<SomeViewModel> html)
    {
        // here you can use html.ActionLink in order
        // to generate the desired markup

        // you also have access to the view model here:
        SomeViewModel model = html.ViewData.Model;

        ... 
    }
}

, а затем, по вашему мнению:

@Html.HtmlPeriods()
...