ASP.NET Core 3 剃刀页面数据注释比较属性返回"Could not find a property named <n>"



我有一个ASP.Net Core 3剃须刀页面,这是一个非常简单的重置密码表单,它使用比较数据注释来验证两个输入是否相同,但似乎不起作用。Required注释触发ok,但Compare始终返回ModelState.Valid==false,并将"找不到名为Password的属性"作为错误消息。

型号是

[BindProperty]
[Required(ErrorMessage = "Password is required.")]
public string Password { get; set; }
[BindProperty]
[Required(ErrorMessage = "Password is required.")]
[Compare(nameof(Password), ErrorMessage = "Passwords don't match")]
public string ConfirmPassword { get; set; }

cshtml是

<form method="Post">
<label>New Password</label>
<input asp-for="Password" type="Password" >
<span asp-validation-for="Password" class="text-danger"></span>
<label>Confirm Password</label>
<input asp-for="ConfirmPassword" type="Password" >
<span asp-validation-for="ConfirmPassword" class="text-danger"></span>
<button type="Submit">Reset Password</button>
</form>

我已经将代码配对到了最低限度,但似乎看不出问题是什么…

感谢Kirk Larkin向我介绍了github问题,详细介绍了这一点。我决定创建一个嵌套的视图模型类来包含属性。"比较"注释现在可以正常工作。

嵌套类如下。。。

[BindProperty]
public ViewModel viewModel { get; set; }
public class ViewModel {
[Required(ErrorMessage = "Password is required.")]
public string Password { get; set; }
[Required(ErrorMessage = "Confirmation Password is required.")]
[Compare(nameof(Password), ErrorMessage = "Passwords don't match.")]
public string ConfirmPassword { get; set; }
}

网页现在看起来是这样的。。。

<form method="Post">
<label>New Password</label>
<input asp-for="viewModel.Password" type="Password" >
<span asp-validation-for="viewModel.Password" class="text-danger"></span>
<label>Confirm Password</label>
<input asp-for="viewModel.ConfirmPassword" type="Password" >
<span asp-validation-for="viewModel.ConfirmPassword" class="text-danger"></span>
<button type="Submit">Reset Password</button>
</form>

最新更新