Перенаправление ASP.Net MVC на другое представление

89

Можно ли с контроллера перенаправить на другой вид?

Например, все мои контроллеры наследуются от настраиваемого контроллера, у которого есть конструктор, который я хочу перенаправить в другое представление, если определенные критерии не выполняются. Надеюсь, это имеет смысл.

Гэвин
источник

Ответы:

147

Вы можете использовать RedirectToAction()метод, тогда действие, на которое вы перенаправляете, может вернуть View. Самый простой способ сделать это:

return RedirectToAction("Index", model);

Затем в своем методе Index верните желаемое представление.

Джон Шиэн
источник
1
Если бы я сделал это таким образом, как мне вернуть конкретное представление из действия контроллера.
Гэвин,
18
return View ("ViewName");
Craig Stuntz,
11
@Craig - возвращаемый вид не выполняет перенаправление, и URL-адрес остается таким же, как и раньше. Итак, если вы находитесь в «/ edit / MyItem», то возвращение View («showitem») даст вам представление «showitem» с URL-адресом «/ edit /». В зависимости от вашей ситуации это может сработать, но не всегда.
jeffreypriebe
5
@jeffrey, это два отдельных шага: перенаправить в первом действии, как сказал Джон, затем вернуть View во втором. Первое действие не может (во всяком случае напрямую) указать второму, какое представление использовать.
Craig Stuntz
@Craig, это немного помогает. Есть «действие» и «взгляд» - две разные вещи. Почему тогда мой ответ ниже работает: RedirectToAction - без изменения View. Я уверен, что это .net MVC 101, но я не понимаю. Спасибо.
Джеффриприбе
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 я не создавал, поэтому я не знаю, где находятся все нужные "неудобные" биты.)

Jeffreypriebe
источник
3

Вот что вы можете сделать:

return View("another view name", anotherviewmodel);
Андрей
источник