ModelState中包含字符串所需的属性两次

问题描述 投票:0回答:1

我用剃刀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,另一种方法是单击从表中的按钮来编辑现有的。

c# asp.net-core razor-pages
1个回答
0
投票

我想出了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();
    }
© www.soinside.com 2019 - 2024. All rights reserved.