Проверить модель в viewmodel? - PullRequest
       2

Проверить модель в viewmodel?

0 голосов
/ 27 августа 2010

Интересно, есть ли способ проверить только одну из моих моделей в модели представления, отправить ее в мои действия?Я использую DataAnnotations в качестве правил проверки.

Как и if (!ModelState.IsValid)

, дайте мне знать, если вопрос неясен, и я исправлю для лучшего объяснения

РЕДАКТИРОВАТЬ моя модель представления выглядит следующим образом

public class CompaniesViewModel
{
    public Core.Model.Customer Company { get; set; }        
    public IEnumerable<SelectListItem> Items { get; set; }        
    public Core.Model.Meeting Meeting { get; set; }
}

Что я хочу сделать в этой конкретной ситуации, это проверить только клиента.Я не могу сделать ModelState.IsValid, тогда все будут проверены.Итак, как я могу сделать, чтобы просто проверить одного из них как клиента в этом случае.Надеюсь, что это было более ясно

Ответы [ 3 ]

1 голос
/ 27 августа 2010

Есть несколько разных способов сделать это.Первый - добавить свойство IsValid, которое проверяет это свойство.Так что-то вроде:

public class Company
{
  public bool IsValid
  {
    get { return GetValid() }
  }

  private bool IsValid()
  {
    if ( Some check here )
      return false;
  }
}


[HttpPost]
public ActionResult SomeAction(CompaniesViewModel model)
{
  if (model.Company.IsValid)
  {
  }
}

Однако лучшим решением IMO было бы просто разместить Компанию на вашем контроллере, а не на всей модели представления.Если вы передаете модель представления в представление, это не означает, что вам нужно опубликовать всю модель представления обратно.Когда вы создаете свою HTML-форму, укажите только те свойства, которые вы хотите отправить обратно на свой контроллер.Так, например, ваш контроллер станет:

[HttpPost]
public ActionResult SomeAction(Company company)
{
  if (Model.IsValid)
  {
  }
}

Теперь, когда вы проверяете Model.IsValid, он просто проверяет компанию, поскольку это все, что вы передали обратно контроллеру.

0 голосов
/ 26 ноября 2011

На стороне сервера вы можете попробовать метод ValidateModel (object), как в TryValidateModel (CompaniesViewModel.Company).

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

  1. либо удаление правил с использованием javascript ASP .NET MVC Отключение проверки на стороне клиента на уровне поля
  2. или создание объекта Data-Transfer-Object, т. Е. Модели представления, которая НЕ имеет ссылки на модель, но воспроизводит нужные объекты с правилами проверки, которые вы хотите применить в этом сценарии. Конечно, тогда вам понадобится в контроллере или связывателе модели какой-либо способ привязки вашей ViewModel к сущностям модели.
0 голосов
/ 28 июля 2011

Вы можете отделить Customer Model от другого класса в вашей ViewModel и сопоставить его в Controller с существующим / новым Customer :

public class CompaniesViewModel
{
    public Company Company { get; set; }        
    public IEnumerable<SelectListItem> Items { get; set; }        
    public Core.Model.Meeting Meeting { get; set; }
}

//Validations for Company go here:
public class Company
{
    public string CompanyId { get; set; }

    [Required]
    public string CompanyName { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...