#asp.net #asp.net-mvc-3
#asp.net #asp.net-mvc-3
Вопрос:
На мой взгляд, у меня есть приведенное ниже утверждение:
window.location = '@Html.Raw(Url.Action("SearchAffaires","Search", (SearchCriteriaAffaire)Session["SearchCriteriaAffaire"]))'
Как я могу преобразовать это с помощью помощника? Что-то вроде:
На мой взгляд:
window.location = '@Html.NavigateSearchPage()'
В HtmlHelpers.cs:
public static string NavigateSearchPage(this HtmlHelper helper)
{
// what do I have to code here?
}
Или, может быть, есть способ получше?
Ответ №1:
Если вы хотите, чтобы сгенерированная ссылка возвращала ваш помощник HtmlString
, используйте UrlHelper
вместо HtmlHelper
ans просто вызовите тот же метод, который вы используете в представлении:
public static HtmlString NavigateSearchPage(this UrlHelper helper)
{
return helper.Action("SearchAffaires","Search",
(SearchCriteriaAffaire)Session["SearchCriteriaAffaire"]);
}
Комментарии:
1. Слишком много закрывающих скобок в помощнике. Функция действия выше.
2. @Chris — Исправлено, спасибо. Я только что скопировал / вставил его из вопроса OP 🙂
3. Без проблем. Так и думал. В оригинале была функция Url.Raw вокруг нее, откуда и взялось дополнительное.
Ответ №2:
Расширение UrlHelper имело бы больше смысла в этом сценарии, чем HTML helper.
Вы могли бы сделать это следующим образом:
public static string SearchPage(this UrlHelper helper)
{
return helper.Action("SearchAffaires",
"Search",
(SearchCriteriaAffaire)Session["SearchCriteriaAffaire"]);
}
Вид:
window.location = '@Html.Raw(Url.SearchPage())';
Комментарии:
1. Отсутствует; из помощника. Действие выше.
Ответ №3:
Вот каким путем вам нужно идти.
public static string NavigateSearchPage(this HtmlHelper helper)
{
var urlHelper = new UrlHelper(helper.ViewContext.RequestContext)
return helper.Raw(urlHelper.Action("SearchAffaires","Search", (SearchCriteriaAffaire)helper.ViewContext.HttpContext.Session["SearchCriteriaAffaire"])));
}