Возвращает разные представления одного контроллера в ASP.NET MVC
Я хочу отправить пользователя на одну из двух разных страниц в зависимости от значения isCustomerEligible
. Когда значение этой переменной установлено в false, оно вызывает индекс, но затем возвращает представление для Customer
, а не представление для Index
.
public ViewResult Index()
{
return View();
}
public ViewResult Customer()
{
DetermineCustomerCode();
DetermineIfCustomerIsEligible();
return isCustomerEligible ? View() : Index();
}
Ответы
Ответ 1
Если вы просто вернете View(), он будет искать представление с тем же именем, что и ваше действие. Если вы хотите указать возвращаемое представление, вы должны поместить имя представления в качестве параметра.
public ViewResult Customer()
{
DetermineCustomerCode();
DetermineIfCustomerIsEligible();
return isCustomerEligible ? View() : View("Index");
}
Если вы хотите на самом деле сделать событие Индекса огнем, а не просто вернуть его представление, вы должны вернуть RedirectToAction(), а также изменить тип возврата на ActionResult
public ActionResult Customer()
{
DetermineCustomerCode();
DetermineIfCustomerIsEligible();
return isCustomerEligible ? View() : RedirectToAction("Index");
}
Ответ 2
Все, что вам нужно сделать, это вернуть требуемый вид.
Если вы хотите вернуть представление с тем же именем, что и действие, которое вы используете, просто используйте return View();
Если вы хотите вернуть View, отличный от используемого вами метода действий, вы указываете имя вида, подобное этому return View("Index");
public ViewResult Index()
{
return View();
}
public ViewResult Customer()
{
DetermineCustomerCode();
DetermineIfCustomerIsEligible();
return isCustomerEligible ? View() : View("Index");
}