繁体   English   中英

ASP.NET MVC Core 1.1.2 登录表单验证错误

[英]ASP.NET MVC Core 1.1.2 Sign-in Form Validation Error

我已经使用 ASP.NET MVC Core 1.1.2 构建了一个电子商务网站。 尽管我使用了正确的方法来实现 ASP.NET 身份验证,但我的客户有时(70% 的时间)会在登录表单中遇到错误。 我查看了他们如何填写表格以及他们的 ModelStates 是否有效。 他们提供的信息没有问题(或者有,但与模型状态无关)。 我提供了发生此错误的代码部分。 当出现错误时,页面会重定向到我在 else 语句中设置的 404 页面。 在此先感谢您的帮助。

注册表看起来像这样: 报名表

如果条目有错误,我将重定向到错误页面的 AccountController.cs:

if (ModelState.IsValid && model.Agreed == "on")
{
    User user = new User { UserName = model.Username, Email = model.Email, RoleSpecific = RoleSpecific.Client };
    IdentityResult result = await _userManager.CreateAsync(user, model.Password);
    if (result.Succeeded)
    {
        await _userManager.AddToRoleAsync(user, "Client");
        Client cli = new Client
        {
            UserID = user.Id,
            HeardOf = model.HeardOf,
            InstagramUsername = model.Instagram,
            TelephoneNumber = model.Telephone,
            TwitterUsername = model.Twitter,
            University = model.University,
            Surname = model.FullName.Split(' ').Last(),
            Name = model.FullName.Substring(0, model.FullName.LastIndexOf(' ')),
            Gender = (Gender)Enum.ToObject(typeof(Gender), Convert.ToInt32(model.Gender))
        };
        await _context.AddAsync(cli);
        _context.SaveChanges();
        var id = _context.Clients.Last().ID;
        var cart = new Cart
        {
            ClientID = id
        };
        await _context.AddAsync(cart);
        _context.SaveChanges();

        string confirmationToken = _userManager.GenerateEmailConfirmationTokenAsync(user).Result;

        string confirmationLink = Url.Action("ConfirmEmail", "Account", new { userid = user.Id, token = confirmationToken }, protocol: HttpContext.Request.Scheme);
        var message = new MimeMessage();
        message.From.Add(new MailboxAddress("unifrogtravel1@yandex.com"));
        message.To.Add(new MailboxAddress(user.Email));
        message.Subject = "Üyelik Onayı";
        message.Body = new TextPart("html")
        {
            Text = "Sayın " + model.FullName + ",<br/> Kaydınızın Tamamlanması için aşağıdaki linke tıklamanız gerekmektedir.<br/><a href=\"" + confirmationLink + "\">Onaylama Linki</a>"
        };
        using (var client = new SmtpClient())
        {
            client.Connect("smtp.yandex.com", 465);
            client.Authenticate("unifrogtravel1@yandex.com", "blapenplefe");
            client.Send(message);
            client.Disconnect(false);
        }


        return RedirectToAction("Index", "Home");
    }
    else
    {
        foreach (var error in result.Errors)
        {
            ModelState.AddModelError(string.Empty, error.Description);
        }
    }
}
return RedirectToAction("Err404", "Home");
}

注册ViewModel.cs:

namespace UnifrogBasicDeneme.ViewModels
{
    public class RegisterViewModel
    {
        [Required]
        public string Username { get; set; }

        [Required]
        [EmailAddress]
        public string Email { get; set; }

        [Required]
        [DataType(DataType.Password)]
        public string Password { get; set; }

        [Required]
        [DataType(DataType.Password)]
        [Display(Name = "Confirm Password")]
        [Compare("Password",ErrorMessage ="Yukaridaki sifre ile ayni degil")]
        public string ConfirmPassword { get; set; }

        [Required]
        public string FullName { get; set; }

        public string Gender { get; set; }

        public string Twitter { get; set; }

        public string Instagram { get; set; }

        public string University { get; set; }

        public string HeardOf { get; set; }
        [Required]
        [RegularExpression("^[0-9]+$")]
        public string Telephone { get; set; }

        public string Agreed { get; set; }
    }

报名表格:

<form id="signupForm" method="Post" action="Account/Register">
    <div class="form-group-lg">
        <input type="text" name="UserName" class="form-control bg-ash" id="exampleInputEmail1" placeholder="Kullanıcı Adı">
    </div>
    <div class="form-group-lg">
        <input type="email" name="Email" class="form-control bg-ash" id="exampleInputPassword1" placeholder="Email">
    </div>
    <div class="form-group-lg">
        <input type="password" name="Password" class="form-control bg-ash" id="exampleInputPassword1" placeholder="Şifre">
    </div>
    <div class="form-group-lg">
        <input type="password" name="ConfirmPassword" class="form-control bg-ash" id="exampleInputPassword1" placeholder="Şifre Tekrar">
    </div>

    <br />
    <p>Kullanıcı Bilgileri</p>

    <div class="form-group-lg">
        <input type="text" name="FullName" class="form-control bg-ash" id="exampleInputEmail1" placeholder="Adınız Soyadınız">
    </div>
    <div class="form-group-lg">
        <select class="form-control bg-ash" id="exampleInputEmail1" placeholder="Cinsiyet">
            <option value="1">Kadın</option>
            <option value="0">Erkek</option>
            <option value="2">Diğer</option>
        </select>
    </div>
    <div class="form-group-lg">
        <input type="text" name="Twitter" class="form-control bg-ash" id="exampleInputEmail1" placeholder="Twitter">
    </div>
    <div class="form-group-lg">
        <input type="text" name="Instagram" class="form-control bg-ash" id="exampleInputEmail1" placeholder="Instagram">
    </div>
    <div class="form-group-lg">
        <input type="text" name="University" class="form-control bg-ash" id="exampleInputEmail1" placeholder="Üniversite">
    </div>
    <div class="form-group-lg">
        <input type="text" name="HeardOf" class="form-control bg-ash" id="exampleInputEmail1" placeholder="Kimden Duydunuz">
    </div>
    <div class="form-group-lg">
        <input type="text" name="Telephone" class="form-control bg-ash" id="exampleInputEmail1" placeholder="Cep Telefonunuz">
    </div>
    <div class="checkbox">
        <label>
            <input type="checkbox" name="Agreed"> <a href="~/img/logo/unifrog.png">Unifrog Şartlarını Okudum Kabul Ediyorum</a>
        </label>
    </div>
    <h5>Giriş yapabilmek için emailinize gelen doğrulama linkine tıklamanız gerekmektedir.</h5>
    <button type="submit" class="btn btn-default">Kaydol</button>
</form>

您应该返回带有模型和模态错误的视图。 所以你的函数的结尾应该是这样的

return View("register",model);

代替

return RedirectToAction("Err404", "Home");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM