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

Я создал глобальную переменную типа de string (erreurUtilisateurExist) и изменил ее значение от одного действия к другому с целью передачи его содержимого через ViewBag в View. Тем не менее, он передается как нулевой. Может кто-нибудь сказать мне, где моя ошибка, пожалуйста, должно быть что-то простое, я не вижу. Извините, что-то на французском.

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 голосов
/ 17 сентября 2018

Сеть не имеет состояния, и каждый раз, когда делается запрос, создается новый экземпляр вашего контроллера, и, следовательно, создается новый экземпляр переменной 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] для проверки на стороне клиента - см. Как: реализовать удаленную проверку в ASP.NET MVC

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...