在ASP.NET Core 3中编辑窗体模型



从控制器中的表单检索数据时遇到问题(所有参数都为Null(。

控制器动作:

public async Task<IActionResult> Register(RegisterFormModel registerFormModel)
{
if (ModelState.IsValid)
{
....
}
}

我的编辑模型:

public class RegisterFormModel
{
[Required]
[StringLength(100)]
[DisplayName("First Name")]
public string RegisterFirstName { get; set; } 
[Required]
[EmailAddress]
[DisplayName("Email")]
public string RegisterEmail { get; set; }
[Required]
[StringLength(100)]
[DataType(DataType.Password)]
[DisplayName("Password")]
public string RegisterPass { get; set; }
[DataType(DataType.Password)]
[Compare("RegisterPass", ErrorMessage = "The password and confirmation password do not match.")]
[DisplayName("Confirm Password")]
public string ConfirmRegisterPass { get; set; }

}

我的观点包括:

@model ProjectName.Model.RegisterFormModel
....
....
<div class="wrap-login100 p-l-50 p-r-50 p-t-72 p-b-50">
<form class="login100-form validate-form" method="post" asp-controller="Account" asp-action="Register">
<span class="login100-form-title p-b-59">
Sign Up
</span>
<div class="wrap-input100 validate-input" data-validate="Name is required">
<span class="label-input100">Full Name</span>
<input asp-for="@Model.RegisterFirstName" class="input100" type="text" name="name" placeholder="Name...">
<span asp-validation-for="@Model.RegisterFirstName" class="focus-input100"></span>
</div>
<div class="wrap-input100 validate-input" data-validate="Valid email is required: ex@abc.xyz">
<span class="label-input100">Email</span>
<input asp-for="RegisterEmail" class="input100" type="text" name="email" placeholder="Email addess..">
<span asp-validation-for="RegisterEmail" class="focus-input100"></span>
</div>

<div class="wrap-input100 validate-input" data-validate="Password is required">
<span class="label-input100">Password</span>
<input asp-for="RegisterPass" class="input100" type="text" name="pass" placeholder="************">
<span asp-validation-for="RegisterPass" class="focus-input100"></span>
</div>
<div class="wrap-input100 validate-input" data-validate="Repeat Password is required">
<span class="label-input100">Repeat Password</span>
<input asp-for="ConfirmRegisterPass" class="input100" type="text" name="repeat-pass" placeholder="*************">
<span asp-validation-for="ConfirmRegisterPass" class="focus-input100"></span>
</div>
<div class="container-login100-form-btn">
<div class="wrap-login100-form-btn">
<div class="login100-form-bgbtn"></div>
<button type="submit" class="login100-form-btn">
Sign Up
</button>
</div>                      
</div>
</form>
</div>

现在,一旦我点击Sign-UP,控制器中registerFormModel对象中的所有变量都会收到NULL。

知道我做错了什么吗?

感谢

在输入控件上指定名称属性会破坏aspnet模型绑定。当使用asp-for绑定到模型属性时,将自动生成"name"one_answers"id"属性。

这是不正确的:

<input asp-for="RegisterEmail" class="input100" 
type="text" name="email" placeholder="Email addess..">

删除name属性以允许正常的模型绑定

<input asp-for="RegisterEmail" class="input100" 
type="text" placeholder="Email addess..">

这是name标签;aspfor应该代替name和id标记。

最新更新