Как я могу передать параметр или значение из одного представления в другое через перенаправление на действие? - PullRequest
0 голосов
/ 05 декабря 2011

У меня есть представление «логин» и представление «сброс пароля» в моем проекте MVC.

После успешного действия по сбросу пароля я перенаправляю обратно в представление «вход в систему».

Мне бы хотелось, чтобы в представлении «логин» имелось средство проверки, произошел ли успешный сброс пароля, чтобы он мог отображать пользователю сообщение с подтверждением / успехом.Каков наилучший механизм для этого?

Я попытался добавить в пакет просмотра и просмотр данных из вида сброса и получить вид входа в систему, чтобы увидеть, есть ли значение, связанное со сбросом, в пакете или данных, но в пакетесбрасывается после перенаправления.

Ответы [ 3 ]

2 голосов
/ 11 декабря 2011

Вы можете сохранить его в переменной сеанса

На вашем контроллере сброса пароля

if (login == "success")
{
     Session["loginStatus"] = "success";
}else{
     Session["loginStatus"] = "failed";
}

На вашем контроллере входа

public actionresult Login()
{
    if (Session["loginStatus"] == "success")
    {
         return RedirectToAction("ActionName", "Controller");
    }

}

Хотя переменные сеанса не всегда являются лучшим способом хранения информации ... вы всегда можете создать класс, у которого есть свойство, к которому вы сможете обращаться по всему сайту.

Кажется, что ViewData и ViewBag очищаются при вызовах контроллера, но сеанс должен проходить через весь сеанс. Надеюсь, что это работает.

2 голосов
/ 05 декабря 2011

Я использую этот стиль из Блог Джона Крюгерса :

[PassParametersDuringRedirect]
public class AccountController : Controller
{
    [AcceptGet]
    public ActionResult Index(IndexPresentationModel model)
    {
        return View(model);
    }

    [AcceptPost]
    public ActionResult Save(SaveUpdateModel model)
    {
        // save the information

        var presentationModel = new IndexPresentationModel();

        presentationModel.Message = model.Message;

        return this.RedirectToAction(c => c.Index(presentationModel));
    }
}

А затем вспомогательный метод для этого:

protected RedirectToRouteResult RedirectToAction<T>(Expression<Action<T>> action)
    where T : Controller
{
    return ControllerExtensions.RedirectToAction(this, action);
}
1 голос
/ 13 декабря 2011

TempData также работает;хотя и не самое красивое решение.Возможно, стоит исследовать решение, на которое ссылается rism, и которое я планирую сделать.

TempData.Add("ForgotPassword", true);
TempData.Add("UserEmail", model.Email);
...