Передача ViewBag / ViewData на каждой странице - PullRequest
0 голосов
/ 11 октября 2019

У меня очень большое приложение asp.NET MVC, и я ищу наиболее эффективный способ добавления справочного документа к каждому представлению. По сути, я добавил частичное представление внутри макета;который вызывается на каждой странице, который вызывает вспомогательный метод для получения возвращаемой строки, а строка - это просто URL справочной документации для этой конкретной страницы.

Это один подход:

{Key: "User_Management",      Value: "/Account/User/List"},
{Key: "User_Management_Edit", Value: "/Account/User/Edit"}

Ключом будет то, что я ищу как часть URL, а значением будет возвращенная строка URL. Таким образом, если URL равен /User/Management/, то возвращаемое значение будет первым в списке, /Account/User/List.

Второй подход может заключаться в том, чтобы хранить ключ User_Management непосредственно впредставление в виде ViewBag или ViewData, а затем проверьте значение в помощнике.

Меня беспокоит только то, что при первом подходе мне придется поддерживать ключи, чтобы убедиться, что они соответствуют URL, а при втором подходе, мне интересно, если неэффективно передавать строку в качестве viewbag для каждого представления.

Хотелось бы услышать некоторые альтернативы или если у кого-то есть идея получше.

1 Ответ

1 голос
/ 11 октября 2019

Альтернатива, хорошая или плохая ...

А как насчет фильтра? Вы можете создать фильтр ниже и явно установить URL справочного документа для каждого действия. Фильтр позаботится о том, чтобы поместить его в один и тот же ключ видовой сумки, чтобы вам не приходилось вводить его каждый раз и рисковать опечатками.

public class HelpDocumentActionFilter : ActionFilterAttribute
{
    string helpDocUrl { get; set; }

    public HelpDocumentActionFilter(string _url)
    {
        helpDocUrl = _url;
    }

    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        //whatever viewbag key you wanted with an opportunity to hit the DB or transform the argument
        filterContext.Controller.ViewBag.HelpUrl = helpDocUrl;
    }

}

использование

 [HelpDocumentActionFilter("/help/doc2")]
    public ActionResult Index()
    {
        ViewBag.Title = "Home Page";

        return View();
    }
...