微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

表单发布字段之一返回NULL .NET Core MVC

如何解决表单发布字段之一返回NULL .NET Core MVC

我有一个表格和一些要发布的字段。将模型发送到控制器方法后,除 Email Address 字段始终为NULL之外的所有参数均正常。我不知道我在做什么错。

Screenshot of The models is here

Screenshot of the controller and the method + the null fields are here

And the form i'm submitting is here

项目文件在我的Repo

注意,除电子邮件地址密码确认以外,所有字段都可以!

[Key]
        public int Id { get; set; }

        [required]
        [display(Name = "First Name")]
        [MaxLength(20,ErrorMessage = "Firstname cannot be contain more tahn 20 characters")]
        public string FirstName { get; set; }

        [required]
        [display(Name = "Last Name")]
        [MaxLength(20,ErrorMessage = "Lastname cannot be contain more tahn 20 characters")]        
        public string LastName { get; set; }

        [required]
        [EmailAddress]
        [display(Name = "Email Address")]
        [MaxLength(40,ErrorMessage = "Email Address cannot contain more that 40 characters")]        
        public string EmailAddress { get; set; }

        [required]
        [display(Name = "Password")]
        [MinLength(8,ErrorMessage = "Password must be atleast 8 characters")]
        [MaxLength(16,ErrorMessage = "Password cannot contain more that 16 characters")]        
        public string Password { get; set; }

        [required]
        [display(Name = "Password Confirmations")]
        [MinLength(8,ErrorMessage = "Password cannot contain more that 16 characters")]
        public string PasswordConfirmation { get; set; }

注册控制器:

private readonly UserContext dbContext;

        public SignupController(UserContext _dbContext)
        {
            this.dbContext = _dbContext;
        }

        public IActionResult Index()
        {
            return View();
        }

        //[HttpPost]
        //[ValidateAntiForgeryToken]
        public IActionResult createuser(User user)
        {
            // Check model validation
            if (!ModelState.IsValid)
                ViewBag.message = "AAAAA";

            // Check duplication
            if (dbContext.users.Any(e => e.EmailAddress == user.EmailAddress))
                return ViewBag("Email address registered");


            dbContext.Add(user);
            dbContext.SaveChanges();
            ViewBag.message = "The user " + user.FirstName + " " + user.LastName + " is saved successfully";

            //return View();
            return Content("Hi");
@model DataAccessLibrary.Models.User;
@{
    Layout = "_Layout";
    ViewBag.Title = "Sign up";
}

<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8" />
    <Meta name="viewport" content="width=device-width,initial-scale=1.0" />
    <Meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Login Page - Product Admin Template</title>
</head>

<body>

    <div class="container tm-mt-big tm-mb-big">
        <div class="row">
            <div class="col-12 mx-auto tm-login-col">
                <div class="tm-bg-primary-dark tm-block tm-block-h-auto">
                    <div class="row">
                        <div class="col-12 text-center">
                            <h2 class="tm-block-title mb-4">Create your account</h2>
                        </div>
                    </div>
                    <div class="row mt-2">
                        <div class="col-12">
                            <form id="signup_form" name="signup_form" asp-action="createuser" asp-controller="Signup" method="post" class="tm-login-form">

                                <!-- Firstname - Start -->
                                <div class="form-group inline-input-container">
                                    <label for="firstname">First Name</label>
                                    <input name="firstname" type="text" class="form-control validate" maxlength="20" id="firstname" value="" asp-for="FirstName" required />
                                    <span asp-validation-for="FirstName" class="text-danger"></span>
                                </div>
                                <!-- Firstname - End -->
                                <!-- Lastname - Start -->
                                <div class="form-group inline-input-container">
                                    <label for="lastname">Last Name</label>
                                    <input name="lastname" type="text" class="form-control validate" maxlength="20" id="lastname" value="" asp-for="LastName" required />
                                    <span asp-validation-for="LastName" class="text-danger"></span>
                                </div>
                                <!-- Lastname - End -->
                                <!-- Email - Start -->
                                <div class="form-group">
                                    <label for="email">Email Address</label>
                                    <input name="email" type="text" class="form-control validate" id="email" maxlength="40" value="" asp-for="EmailAddress" required />
                                    <span asp-validation-for="EmailAddress" class="text-danger"></span>
                                </div>
                                <!-- Email - End -->
                                <!-- Password - Start -->
                                <div class="form-group mt-3 inline-input-container">
                                    <label for="password">Password</label>
                                    <input name="password" type="password" class="form-control validate" maxlength="16" id="password" value="" asp-for="Password" required />
                                    <span asp-validation-for="Password" class="text-danger"></span>
                                </div>
                                <!-- Password - End -->
                                <!-- Confirm Password - Start -->
                                <div class="form-group mt-3 inline-input-container">
                                    <label for="confirm_password">Confirm Password</label>
                                    <input name="confirm_password" type="password" maxlength="16" class="form-control validate" id="confirm_password" asp-for="PasswordConfirmation" value="" required />
                                </div>
                                <!-- Confirm Password - End -->
                                <div class="form-group mt-4">
                                    <button id="submission" type="submit" class="btn btn-primary btn-block text-uppercase">Sign up</button>
                                </div>
                                <b id="msg"></b>
                            </form>
                            <div class="form-group mt-4">
                                <a asp-action="Index" asp-controller="Home" class="btn btn-primary btn-block text-uppercase inline" style="width: 60%">Resend Confirmation?</a>
                                <a asp-controller="Home" asp-action="Login" class="btn btn-primary btn-block text-uppercase inline" style="width: 40%">Login</a>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>

@section Scripts{
    <script type="text/javascript">        
        //$('#submission').click(function () {
        //    var form = $("#signup_form");
        //    var url = form.attr("action");
        //    var formData = form.serialize();
        //    $.post(url,formData,function (data) {
        //        $("#msg").html(data);
        //    });
        //})
    </script>
}

解决方法

您正在通过使用'id'和'name'元素来覆盖属性名称。因此,“ asp-for”未用于正确呈现属性。 用于绑定工作:

<input type="text" class="form-control validate" maxlength="40" value="" asp-for="EmailAddress" required />

玩得开心!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。