Параметр чтения URL для помощников - PullRequest
0 голосов
/ 05 сентября 2018

Есть помощники, которые отвечают за добавление активных классов в меню.

public static class HtmlHelpers
{
    public static string IsSelected(this IHtmlHelper html, string controller = null, string action = null, string status = null, string cssClass = null)
    {
        if (String.IsNullOrEmpty(cssClass))
            cssClass = "active";

        string currentAction = (string)html.ViewContext.RouteData.Values["action"];
        string currentController = (string)html.ViewContext.RouteData.Values["controller"];
        string currentStatus = (string)html.ViewContext.RouteData.Values["status"];


        if (String.IsNullOrEmpty(controller))
            controller = currentController;

        if (String.IsNullOrEmpty(action))
            action = currentAction;

        if (String.IsNullOrEmpty(status))
            status = currentStatus;

        return controller == currentController && action == currentAction && status == currentStatus ?
            cssClass : String.Empty;
    }

    public static string PageClass(this IHtmlHelper htmlHelper)
    {
        string currentAction = (string)htmlHelper.ViewContext.RouteData.Values["action"];
        return currentAction;
    }

}

Хотя стандартные параметры URL ("controller} / {action} / {id?}" Задействованы, все работает отлично. Но как читать переменные в URL.

Есть https://localhost:/Contractors?Status=false

Как получить данные STATUS

P.S. Для тех, кто позже хочет использовать Helper. CHTML

<li class="@Html.IsSelected(action: "Index", controller: "Contractors", status: "true")"><a asp-action="Index" asp-controller="Contractors" asp-route-status="true">Clients</a></li>

1 Ответ

0 голосов
/ 05 сентября 2018

RouteData содержит только значения, извлеченные из маршрута. Поэтому, если вы не добавите параметр status в маршрут (например, /contractors/{status}), вы не сможете получить значение из данных маршрута.

В данном случае это обычный параметр строки запроса, который вы можете получить из ViewContext.HttpContext.Request:

var status = html.ViewContext.HttpContext.Request.Query["status"].ToString();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...