Возвращает разные представления одного контроллера в 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");
    }