【发布时间】:2020-02-10 06:34:12
【问题描述】:
我正在将较旧的 ASP.NET 4.5 网站移植到 ASP.NET Core 3.0,并且在身份 Razor 页面及其工作方式方面遇到了一些问题。
例如,在应用程序的注册页面,如下图,表格是完整填写的,但是当点击按钮时,我在Register.cs文件的PostAsync()方法中打了断点,与Input 模型绑定,所有内容始终为 null,除了我在 HTML 中设置初始选定值的 Enum。
注意: 是的,我在代码文件中看到了输入。那不是问题。截图后我就去掉了。
[BindProperty]
public InputModel Input { get; set; }
public class InputModel
{
[Required]
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Required]
[Display(Name = "Last Name")]
public string LastName { get; set; }
[Required]
[Display(Name = "Gender")]
public Gender Gender { get; set; }
[Required]
[Phone]
[Display(Name = "MobilePhone")]
public string MobilePhone { get; set; }
[Required]
[EmailAddress]
[Display(Name = "Email")]
public string Email { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm password")]
[Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}
在我的Startup 文件中:
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_3_0)
.ConfigureApiBehaviorOptions(options =>
{
options.SuppressConsumesConstraintForFormFileParameters = true;
options.SuppressInferBindingSourcesForParameters = true;
options.SuppressModelStateInvalidFilter = true;
options.SuppressMapClientErrors = true;
});
关于为什么ModelState 由于表单值始终为空而总是无效的任何想法?
这是表单的 HTML:
<form asp-route-returnUrl="@Model.ReturnUrl"
class="form-horizontal push-50-t push-50 form-register"
method="post">
<div asp-validation-summary="All" class="text-danger"></div>
<!-- form entry - first name -->
<div class="form-group">
<div class="col-xs-12">
<div class="form-material form-material-success">
<label asp-for="Input.FirstName"></label>
<input asp-for="Input.FirstName" type="text"
id="register-firstname" name="register-firstname"
class="form-control" placeholder="Enter your first name" />
<span asp-validation-for="Input.FirstName" class="text-danger"></span>
</div>
</div>
</div>
<!-- form entry - last name -->
<div class="form-group">
<div class="col-xs-12">
<div class="form-material form-material-success">
<label asp-for="Input.LastName"></label>
<input asp-for="Input.LastName" type="text"
id="register-lastname" name="register-lastname"
class="form-control" placeholder="Enter your last name" />
<span asp-validation-for="Input.LastName" class="text-danger"></span>
</div>
</div>
</div>
<!-- form entry - gender -->
<div class="form-group">
<div class="col-xs-12">
<div class="form-material form-material-success">
<label asp-for="Input.Gender"></label>
<select class="form-control" asp-for="Input.Gender" id="register-gender" name="register-gender"
placeholder="Please enter Male/Female">
<option selected="selected" value="@Gender.Male">Male</option>
<option value="@Gender.Female">Female</option>
</select>
<span asp-validation-for="Input.Gender" class="text-danger"></span>
</div>
</div>
</div>
<!-- form entry - mobile phone -->
<div class="form-group">
<div class="col-xs-12">
<div class="form-material form-material-success">
<label asp-for="Input.MobilePhone"></label>
<input asp-for="Input.MobilePhone" type="tel"
id="register-mobilephone" name="register-mobilephone"
class="form-control" placeholder="Provide your mobile phone number" />
<span asp-validation-for="Input.MobilePhone" class="text-danger"></span>
</div>
</div>
</div>
<!-- form entry - email -->
<div class="form-group">
<div class="col-xs-12">
<div class="form-material form-material-success">
<label asp-for="Input.Email"></label>
<input asp-for="Input.Email"
type="email" id="register-email" name="register-email"
class="form-control" placeholder="Your email address" />
<span asp-validation-for="Input.Email" class="text-danger"></span>
</div>
</div>
</div>
<!-- form entry - password -->
<div class="form-group">
<div class="col-xs-12">
<div class="form-material form-material-success">
<label asp-for="Input.Password"></label>
<input asp-for="Input.Password"
type="password" id="register-password" name="register-password"
class="form-control" placeholder="Choose a strong password" />
<span asp-validation-for="Input.Password" class="text-danger"></span>
</div>
</div>
</div>
<!-- form entry - confirm password -->
<div class="form-group">
<div class="col-xs-12">
<div class="form-material form-material-success">
<label asp-for="Input.ConfirmPassword"></label>
<input asp-for="Input.ConfirmPassword"
type="password" id="register-password2" name="register-password2"
class="form-control" placeholder="Confirm your password" />
<span asp-validation-for="Input.ConfirmPassword" class="text-danger"></span>
</div>
</div>
</div>
<div class="form-group">
<div class="col-xs-7 col-sm-8">
<label class="css-input switch switch-sm switch-success">
<input type="checkbox" id="register-terms" name="register-terms"><span></span> I agree with terms & conditions
</label>
</div>
<div class="col-xs-5 col-sm-4">
<div class="font-s13 text-right push-5-t">
<a href="#" data-toggle="modal" data-target="#modal-terms">View Terms</a>
</div>
</div>
</div>
<div class="form-group">
<div class="col-xs-12 col-sm-6 col-sm-offset-3">
<button id="register-button" class="btn btn-sm btn-block btn-success" type="submit">Create Account</button>
</div>
</div>
</form>
<!-- END Register Form -->
更新:根据评论者的要求,这里也是请求负载。
【问题讨论】:
标签: c# asp.net-core model-binding asp.net-core-3.0 modelstate