从一项行动到另一项行动的全球变量损失价值

时间:2018-09-16 22:08:44

标签: asp.net-mvc

我创建了一个全局变量de类型字符串(erreurUtilisateurExist),并将其值从一个动作更改为另一个动作,目的是将其内容通过ViewBag传递给View。但是,它作为null传递。有人可以告诉我我的错误在哪里,一定是我看不到的简单东西。抱歉,有些东西是法语的。

public class AuthController : Controller
{

    string erreurUtilisateurExist = "";        

    public ActionResult Create()
    {
        ViewBag.ErreurUtilisateurExist = erreurUtilisateurExist;
        return View();
    }

    [HttpPost]
    public ActionResult Create(Utilisateur utilisateur)
    {
        bool NotinDB = Utilisateur.creer(utilisateur);

        if (NotInDB)
        {
            FormsAuthentication.SetAuthCookie(utilisateur.Email, false);
            return RedirectToAction("Index", "Home");
        }
        else
        {
            erreurUtilisateurExist = "There is a user already using this address";
            return View("Create");
        }

    }

1 个答案:

答案 0 :(得分:1)

网络是无状态的,每次发出请求时,控制器的新实例,因此将创建erreurUtilisateurExist变量的新实例(其值不会持久)。

在这种情况下,正确的方法是添加一个ModelState错误并返回视图,以便将其显示给用户。将您的控制器代码更改为

[HttpPost]
public ActionResult Create(Utilisateur utilisateur)
{
    if (!ModelStateIsValid)
    {
        return View(utilisateur);
    }
    bool NotinDB = Utilisateur.creer(utilisateur);
    if (NotInDB)
    {
        FormsAuthentication.SetAuthCookie(utilisateur.Email, false);
        return RedirectToAction("Index", "Home");
    }
    else
    {
        ModelState.AddModelError("", "There is a user already using this address");
        return View(utilisateur);
    }
}

,错误消息将显示在视图中@Html.ValidationSummary()生成的元素中。

如果要显示与特定属性相关的错误,请使用(说)

ModelState.AddModelError("Email", "There is a user already using this address");

将显示在由

定义的占位符中
@Html.ValidationMessageFor(m => m.Email)

您还可以使用[Remote]属性来进行客户端验证-请参考How to: Implement Remote Validation in ASP.NET MVC