Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ModelState和AddModelError是否在控制器/操作中持久化?_C#_Asp.net Mvc_Modelstate - Fatal编程技术网

C# ModelState和AddModelError是否在控制器/操作中持久化?

C# ModelState和AddModelError是否在控制器/操作中持久化?,c#,asp.net-mvc,modelstate,C#,Asp.net Mvc,Modelstate,我的控制器操作: [AcceptVerbs(HttpVerbs.Get)] public ActionResult Login() { return View(); } [AcceptVerbs(HttpVerbs.Post)] public ActionResult Login(string UserName, string Password, bool RememberMe) { var userNam

我的控制器操作:

    [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");
    }

这里唯一保留的是用户名、密码和memberme值。提交表单时,用户名、密码和memberme将自动添加到ModelState。然后Html.TextBox()从ModelState获取值并将其插入Html


例如,如果您提交了一个错误的用户名,控制器会添加一个ModelState错误。表单将再次呈现,但您将看到用户名已被旧值填充。如果您再次提交,显然会再次出现相同的错误。

实际上,这是我的温莎城堡配置

 container.Register(
        AllTypes
            .FromAssemblyNamed("Aplication")
            .BasedOn<IController>()
            .Configure(c => c.LifeStyle.Is(LifestyleType.Transient))
            .WithService
            .FirstInterface()
        );
container.Register(
各种类型
.FromAssemblyName(“应用程序”)
.BasedOn()
.Configure(c=>c.LifeStyle.Is(LifestyleType.Transient))
.带服务
.FirstInterface()
);

奇怪的是,我不能同时使用based-on和where子句。

你能解释一下这个问题吗?再次提交表格是什么意思?也许您需要在ModelState中首先清除错误。您确定您的验证器不会在第二次生成错误吗?ModelState和错误不会在调用之间持久化。你能发布表单html代码吗?不应该,因为我有
break的循环控制检查当你说“再次提交表单”时,是否可以安全地假设你没有再次提交完全相同的数据?好吧,是和否。它可能是相同的,也可能不相同。我知道,但它似乎保持了一切不变。
        container.Register(
            AllTypes
                .FromAssemblyNamed("Aplication")
                .BasedOn<IController>()
                .Where(t => t.Name.EndsWith("Controller"))
                .Configure(c => c.LifeStyle.Is(LifestyleType.Transient))
                .WithService
                .FirstInterface()
            );
 container.Register(
        AllTypes
            .FromAssemblyNamed("Aplication")
            .BasedOn<IController>()
            .Configure(c => c.LifeStyle.Is(LifestyleType.Transient))
            .WithService
            .FirstInterface()
        );