Подтвердить что ты не робот

Как вернуть ActionResult с определенным представлением (а не именем контроллера)

У меня есть метод SendMail в MVC Controller. Этот метод вызывает другой метод ValidateLogin. Это подпись Validate Login:

private ActionResult ValidateLogin(Models.ResetPassword model)

Когда я вызываю ValidateLogin из SendMail, это исключение появляется, потому что контроллер пытается выполнить поиск SendMail, но я хочу загрузить ResetPassword View:

Global Error - The view 'SendMail' or its master was not found or no view engine supports the searched locations. The following locations were searched: ...

Это код SendMail:

public ActionResult SendMail(string login)
{
        return ValidateLogin(login);
}

Как я могу переопределить представление в операторе return?

Заранее спасибо

4b9b3361

Ответ 1

наконец, это было решение

return View("ResetPassword", new ResetPassword
            {
                fields= fields
            });

Ответ 2

private ActionResult SendMail(string login)
{
            return View("~/Views/SpecificView.cshtml")
}

Вы можете прямо указывать на конкретное представление, явно указывая на свое местоположение.

Ответ 3

Метод View имеет перегрузку, которая получает строку в viewName. Иногда вы хотите передать string в качестве модели, а структура asp.net смущает ее, пытаясь найти представление со значением string. Попробуйте что-то вроде этого:

public ActionResult SendMail(string login)
{
   this.Model = login; // set the model
   return View("ValidateLogin"); // reponse the ValidateLogin view
}

Ответ 4

Вы можете вернуть представление по имени, подобному этому

return View("viewnamehere");

Ответ 5

Спасибо за предоставление ответа на переполнение стека!

Пожалуйста, обязательно ответьте на вопрос. Предоставьте детали и поделитесь своими исследованиями! Но избегайте...

Обращение за помощью, разъяснения или ответы на другие ответы. Делать заявления, основанные на мнении; подкрепите их ссылками или личным опытом. Чтобы узнать больше, ознакомьтесь с нашими советами по написанию отличных ответов.

Ответ 6

Если SendMail был POST, вы должны использовать шаблон POST-REDIRECT-GET

    public ActionResult SendMail(string login)
    {
        ...        
        return RedirectToAction("ResetPassword", login);
    }

    public ActionResult ResetPassword(string login)
    {
        ...
        return View("ResetPassword", login);
    }

Это защитит вас от двойного поста в IE