Переспрямування ASP.Net MVC на інший погляд


89

Чи можна перенаправити на інший вигляд від контролера?

Наприклад, усі мої контролери успадковують від користувацького контролера, який має конструктор, який я хочу перенаправити на інший вигляд, якщо певні критерії не виконуються. Сподіваюся, що це має сенс.

Відповіді:


147

Ви можете використовувати RedirectToAction()метод, тоді дія, на яку ви переспрямовуєте, може повернути подання. Найпростіший спосіб зробити це:

return RedirectToAction("Index", model);

Потім у вашому методі Index поверніть потрібний вигляд.


1
Якби я зробив це таким чином, як я можу повернути певний вигляд з дії контролера.
Гевін

18
return View ("ViewName");
Крейг Стунтц

11
@Craig - повернення View не робить перенаправлення, і URL-адреса в кінцевому підсумку залишається такою ж, як і раніше. Отже, якщо ви знаходитесь у "/ edit / MyItem", тоді повернення View ("showitem") дасть вам "showitem" view з "/ edit /" url. Залежно від вашої ситуації це може спрацювати, але не завжди.
jeffreypriebe

5
@jeffrey, це два окремі кроки: перенаправлення в першій дії, як сказав Джон, потім повернення View у другій. Перша дія не може (безпосередньо, так чи інакше) сказати другій, який вид використовувати.
Крейг Стунтц,

@Craig, що трохи допомагає. Існує "дія" та "погляд" - дві окремі речі. Чому тоді працює моя відповідь нижче: RedirectToAction - жодних змін у поданні. Я впевнений, що це .net MVC 101, але я не розумію. Дякую.
jeffreypriebe

20
 if (true)
 {
   return View();
 }
 else
 {
   return View("another view name");
 }

2
Тут використовується та сама дія контролера. RedirectToAction викликає іншу дію. Це було найпростішим рішенням для мене.
RaoulRubin

6

Найпростіший спосіб - використовувати функцію return View.

return View("ViewName");

Пам'ятайте, фізичне ім'я "ViewName" має бути приблизно таким, як ViewName.cshtml у вашому проекті, якщо ви використовуєте MVC C # / .NET.


4

Я не впевнений на 100%, які умови для цього, але для мене вищезазначене не спрацювало безпосередньо, думав, що наблизилося. Я думаю, це було тому, що мені потрібен був "id" для мого подання, оскільки в моделі вона називалася "ObjectID".

У мене була модель із різноманітною інформацією. Мені просто потрібен ідентифікатор.

До цього я створив новий об'єкт System.Web.Routing.RouteValueDictionary та додав необхідний ідентифікатор.

(System.Web.Routing.)RouteValueDictionary RouteInfo = new RouteValueDictionary();
RouteInfo.Add("id", ObjectID);
return RedirectToAction("details", RouteInfo);

(Примітка: розглянутий проект MVC я не створював, тому я не знаю, де знаходяться всі правильні біти.)


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.