ModelState.Isvalid, почему он проверяет соответствующие таблицы?

#validation #asp.net-core #entity-framework-core #razor-pages #entities

#валидация #asp.net-core #сущность-структура-ядро #бритва-страницы #сущности

Вопрос:

Это свойства для проверки. (Код из моего cshtml.cs (Razor))

     [BindProperty]
    public TMedProductStorageLocation TMedProductStorageLocation { get; set; }
    [BindProperty]
    public IList<TStorageLocation> TStorageLocations { get; set; }
    [BindProperty]
    public int SelectedStorageLocationId { get; set; }
    [BindProperty]
    public TMedProduct SelectedProduct { get; set; }

    [BindProperty]
    public int RelocateAmount { get; set; }
 

Это те свойства, которые я хочу проверить. Но это также подтверждает:

   public class TSubstanceGroup
{

    public TSubstanceGroup()

    {
        TMedProducts = new HashSet<TMedProduct>();

    }
    [Key]
    public int Id { get; set; }

    [Required(ErrorMessage = "Geben Sie eine Bezeichnung ein.")]

    public string Name { get; set; }

    public ICollection<TMedProduct> TMedProducts { get; set; }
}
 

потому что это таблица, связанная с TMedProduct .
Как я могу избежать проверки для связанных таблиц?

Комментарии:

1. Не могли бы вы, пожалуйста, поделиться своим интерфейсом razor pages?

Ответ №1:

Не уверен, каков ваш дизайн razor pages, но вам нужно знать, что ModelState будет проверять все модели, которые вы определяете в серверной части razor pages, не из-за того, что у вас есть связь между моделями:

 public class PrivacyModel : PageModel
{
    [BindProperty]
    public TSubstanceGroup TSubstanceGroup { get; set; }
    [BindProperty]
    public TMedProduct SelectedProduct { get; set; }
    [BindProperty]
    public TMedProductStorageLocation TMedProductStorageLocation { get; set; }
    [BindProperty]
    public IList<TStorageLocation> TStorageLocations { get; set; }
    [BindProperty]
    public int SelectedStorageLocationId { get; set; }
    [BindProperty]
    public int RelocateAmount { get; set; }
    public IActionResult OnPost()
    {
       //...
    }

    public void OnGet()
    {
        //..
    }
    
}
 

Чтобы избежать проверки для связанных таблиц, вы можете удалить проверку с помощью ключа:

 public IActionResult OnPost()
{
    ModelState.Remove("KeyName");
    if(ModelState.IsValid)
    {
        //...
    }
    return Page();
}
 

Чтобы узнать имя ключа, вы можете проверить ModelState:
введите описание изображения здесь

Комментарии:

1. Эй, спасибо за этот ответ!! Теперь я знаю, почему Modelstate был недействительным и как я могу этого избежать.