我创建了一个全局变量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");
}
}
答案 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