0

私のコントローラーアクション:

    [AcceptVerbs(HttpVerbs.Get)]
    public ActionResult Login()
    {
        return View();
    }

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Login(string UserName, string Password, bool RememberMe)
    {
        var userNameValidationResults = _validatorProvider.Validate<IMailAddressValidator>(UserName);
        foreach (var result in userNameValidationResults.Where(r => !r.Passed)) {
            ModelState.AddModelError("UserName", result.ErrorMessage);
        }

        var passwordValidationResults = _validatorProvider.Validate<IStringLengthValidator>(Password);
        foreach (var result in passwordValidationResults.Where(r => !r.Passed)) {
            ModelState.AddModelError("Password", "Please enter a password.");
        }

        if (!ModelState.IsValid)
            return View();

        bool validUser = _userMembershipService.ValidateUser(UserName, Password);

        if (!validUser) {
            ModelState.AddModelError("_FORM", "Invalid e-mail address and/or password.");
            return View();
        }

        _userAuthenicationService.Login(UserName, RememberMe);

        return RedirectToAction("Index", "Home");
    }

私の見解:

<h2>Login</h2>
<%= Html.ValidationSummary() %>
<% using (Html.BeginForm()) { %>
    <%= Html.TextBox("UserName") %>
    <%= Html.Password("Password") %>
    <%= Html.CheckBox("RememberMe") %>
    <input type="submit" value="Login" />
<% } %>

検証エラーの後にフォームを再度送信すると、別のエラー (まったく同じエラー) がValidationSummary. なぜそれが起こっているのですか?ありがとう。

編集私が言いたいのは、私が持っているということですn-number of error ここでnは提出の数です。

編集2 私が今問題を抱えているのは、それが持続しているように見える-フォームフィールドの値でさえ変更されない. 上記のコードを更新しました。また、IoC コンテナーに Castle Windsor を使用していますが、それが問題の原因になるとは思いません。ただし、場合によっては、コントローラーを登録するために使用しているソースを次に示します。

        container.Register(
            AllTypes
                .FromAssemblyNamed("Aplication")
                .BasedOn<IController>()
                .Where(t => t.Name.EndsWith("Controller"))
                .Configure(c => c.LifeStyle.Is(LifestyleType.Transient))
                .WithService
                .FirstInterface()
            );
4

2 に答える 2

0

ここで保持されるのは、userName、password、rememberMe の値だけです。フォームが送信されると、userName、password、rememberMe が ModelState に自動的に追加されます。次に、Html.TextBox() が ModelState から値を取得し、HTML に挿入します。

たとえば、不適切な userName を送信すると、コントローラーは ModelState エラーを追加します。フォームが再びレンダリングされますが、userName には既に古い値が入力されていることがわかります。再度送信すると、明らかに同じエラーが再び発生します。

于 2009-06-11T17:17:03.963 に答える