Для нашего веб-приложения мне нужно сохранить порядок выбранных и отображаемых элементов в зависимости от представления - или, если быть точным, контроллера и действия, которые сгенерировали представление (и, конечно, идентификатор пользователя, но здесь дело не в этом).
Вместо того, чтобы просто указывать свой идентификатор в каждом действии контроллера (чтобы использовать его для некоторой зависящей от вида сортировки выходов БД), я подумал, что будет безопаснее и проще создать этот идентификатор автоматически из контроллера и метода действия, который он получает. звонил из.
Как я могу получить имя контроллера и действие из метода действия в контроллере? Или мне нужно размышление для этого? Я думаю, это довольно легко, спасибо заранее!
Route
атрибутом в методе действия, который я собираю? Кроме того, возможно ли переименовать контроллеры?Ответы:
источник
Вот несколько методов расширения для получения этой информации (включая идентификатор):
Использование:
источник
Может быть полезным. Мне нужно было действие в конструкторе контроллера, и оно появляется в этой точке жизненного цикла MVC,
this
не инициализировано, иControllerContext = null
. Вместо того чтобы углубляться в жизненный цикл MVC и находить подходящее имя функции для переопределения, я просто нашел действие вRequestContext.RouteData
.Но для этого, как и в случае любого
HttpContext
другого связанного с этим использования в конструкторе, необходимо указать полное пространство имен, поскольку оноthis.HttpContext
также не было инициализировано. К счастью, это выглядитSystem.Web.HttpContext.Current
статично.ПРИМЕЧАНИЕ: вероятно, не самый поддерживаемый способ доступа ко всем свойствам в HttpContext, но для RequestContext и Session он, кажется, работает нормально в моем приложении.
источник
источник
источник
Это то, что я до сих пор:
источник
Вот самый простой и практичный ответ для получения имени:
Или
Код выше тестов с asp.net MVC 5.
источник
Добавьте это к вашему базовому контроллеру внутри метода GetDefaults ()
Реализуйте свои контроллеры для Реализуйте Basecontroller
Добавьте частичное представление _Breadcrumb.cshtml и добавьте его на все необходимые страницы с помощью @ Html.Partial ("_ Breadcrumb")
_Breadcrumb.cshtml
источник
filterContext
переменную изнутриGetDefaults()
?Вы можете получить имя контроллера или имя действия из действия, как любая переменная. Они просто особенные (контроллер и действие) и уже определены, поэтому вам не нужно делать ничего особенного, чтобы получить их, кроме как сказать, что они вам нужны.
Или вы можете включить контроллер, действие в ваших моделях, чтобы получить два из них и ваши пользовательские данные.
источник
Кажется, это работает хорошо для меня (пока), также работает, если вы используете маршрутизацию атрибутов.
источник
Убрать необходимость
ToString()
использования звонкаисточник
строка actionName = this.ControllerContext.RouteData.Values ["action"]. ToString ();
string controllerName = this.ControllerContext.RouteData.Values ["controller"]. ToString ();
источник
Почему бы не иметь что-то попроще?
Просто позвони
Request.Path
, он вернет строку, разделенную символом "/"и тогда вы можете использовать
.Split('/')[1]
чтобы получить имя контроллера.источник
http://www.example.com/sites/site1/controllerA/actionB/
. MVC предоставляет множество API для маршрутизации, так почему вам нужно анализировать (снова) URL ?.controller/action