Использование HTML. ActionLink и URL. Действие (…) из Контроллера

Я хочу записать HtmlHelper для рендеринга ActionLink с предварительно установленными значениями, например.

<%=Html.PageLink("Page 1", "page-slug");%>

где PageLink функция, которая звонит ActionLink с известным Действием и Контроллером, например, "Индексом" и "Страницей".

С тех пор HtmlHelper и UrlHelper не существуйте внутри a Controller или класс, как я получаю относительный URL к действию из класса?

Обновление: Учитывая дополнительные три года накопленного опыта я имею теперь, вот мой совет: просто используйте Html.ActionLink("My Link", new { controller = "Page", slug = "page-slug" }) или еще лучше,

<a href="@Url.Action("ViewPage",
                     new {
                           controller = "Page",
                           slug = "my-page-slug" })">My Link</a>

Ваш дополнительный метод может быть милым и коротким, но он добавляет другую непротестированную точку отказа и новое требование изучения для наймов, не добавляя действительного значения вообще. Думайте о нем как о разработке сложной системы. Почему добавляют другую подвижную часть, если она не добавляет надежность (не), удобочитаемость (мало, после того как Вы читаете больше документов), ускоритесь (ни один) или параллелизм (ни один).

12
задан Petrus Theron 3 September 2013 в 22:14
поделиться

1 ответ

Не уверен, что правильно понял ваш вопрос, но позвольте мне попробовать.

Чтобы создать расширение HtmlHelper, как вы описали, попробуйте что-нибудь вроде:

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

namespace Something {
    public static class PageLinkHelper
    {
        public static string PageLink(
            this HtmlHelper helper,
            string linkText, string actionName,
            string controllerName, object routeValues,
            object htmlAttributes)
        {
            return helper.ActionLink(
                linkText, actionName, controllerName,
                routeValues, htmlAttributes);
        }
    }
}

Что касается вашего вопроса о получении URL-адреса из класса, это зависит от того, какой класс вы его реализуете. Например, если вы хотите получить текущий контроллер и действие из расширения HtmlHelper, вы можете использовать:

string currentControllerName = (string)helper.ViewContext
    .RouteData.Values["controller"];
string currentActionName = (string)helper.ViewContext
    .RouteData.Values["action"];

Если вы хотите получить его из контроллера, вы можете использовать свойства / методы из базового класса (Контроллер) для создания URL-адрес. Например:

var url = new UrlHelper(this.ControllerContext.RequestContext);
url.Action(an_action_name, route_values);
20
ответ дан 2 December 2019 в 18:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: