我用剃刀Pages.I've下来以奇数behavior.The问题制定一个Asp.Net 2.1核心应用是,当我提交表单,客户端验证通过了所有必需的属性填写,但随后的验证失败与ModelState.IsValid检查,原因是该ModelState中包含所需字符串属性两次,一次与所输入的值,并用一个空值,那么验证失败!
{[BANKNAME,Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary + ModelStateNode]}
{[BankAccount.BankName,Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary + ModelStateNode]}
看,是的BankAccount模型类,并BANKNAME是必需的property.I不知道为什么财产的ModelState字典,一个具有模型名称(用输入的数据)和一个没有MODELNAME出现两次(含空值)任何想法,为什么发生这种情况?
public class BankAccount
{
[DisplayName("")]
public int BankAccountId { get; set; }
[MaxLength(20, ErrorMessage = "")]
[Required(ErrorMessage = "")]
[DisplayName("")]
public string BankName { get; set; }
...
这里的代码onPOST等()在验证失败:
public async Task<IActionResult> OnPostAsync()
{
// TODO: Not ideal! But solves the problem of returning invalid model state.
ModelState.Remove("BankName");
if (!ModelState.IsValid)
{
return RedirectToPage();
}
_context.BankAccounts.Add(BankAccount);
await _context.SaveChangesAsync();
return RedirectToPage();
}
搜索了很多之后,我发现了一个解决办法,这是不是很ideal.That的去除已被奇怪插入的ModelState字典中的附加属性。我的意思是这条线:
ModelState.Remove("BankName");
但是,这不是正确的way.I'd想弄清楚为什么发生?
下面是对PageModel定义的两个属性:
[BindProperty]
public BankAccount BankAccount { get; set; }
[BindProperty]
public BankAccount BankAccountEdit { get; set; }
一个是用于插入新的BankAccount,另一种方法是单击从表中的按钮来编辑现有的。
我想出了issue.The问题是,我在我的页面模型,一个用于插入新的实体,另一个编辑都在同一页上的现有实体具有相同类型的(BankAccount类)的两个属性。因此,为了验证每个单独形式onPOST等()中,我使用以下代码:
public async Task<IActionResult> OnPostAsync()
{
var validateBankAccount = ModelState.GetFieldValidationState("BankAccount");
if (validateBankAccount ==
Microsoft.AspNetCore.Mvc.ModelBinding.ModelValidationState.Invalid)
{
return RedirectToPage();
}
_context.BankAccounts.Add(BankAccount);
await _context.SaveChangesAsync();
return RedirectToPage();
}