ASP.NET MVC: проверьте, действительно ли связанная модель была передана в действие - PullRequest
1 голос
/ 11 ноября 2010

У меня есть действие с FilterModel, переданным ему. Я использую поиск, чтобы передать фильтр действию, или вызываю действие, не передавая ему фильтр. Когда я называю это нормально, создается экземпляр фильтра (чего я не ожидал). Как проверить, что фильтр на самом деле не пропущен?

Моя модель:

public class ProductFilterModel
{
    //Using a constructor so the search view gets a default value.
    public ProductFilterModel()
    {
        MinPrice = 500;
        MaxPrice = 1000;
    }

    public int MinPrice { get; set; }
    public int MaxPrice { get; set; }
}

Действие:

public ActionResult Index(ProductFilterModel filter){
    //How do I check if no filter was passed?
}

Обычный вызов к действию: localhost/Products, тогда как фильтрованный вызов будет localhost/Products?MinPrice=5&MaxPrice=100

Когда мое действие получает вызов в обычном режиме, фильтр по умолчанию принимает значения, указанные выше, поэтому я даже не могу проверить, является ли MinPrice 0, чтобы узнать, загружать ли его нормально.

Ответы [ 3 ]

3 голосов
/ 11 ноября 2010

Вы можете проверить ModelState.Count. Если ModelState.Count == 0, то во время привязки для вашей модели не было задано никаких значений.

1 голос
/ 11 ноября 2010

Я бы:

  1. Сделал бы MinPrice, MaxPrice обнуляемыми, чтобы я мог фильтровать только по минимальному или максимальному, а не по обоим.
  2. Не устанавливатьdefault для ViewModel.
  3. Установить значение по умолчанию из действия, в котором создается фильтр.
  4. Реализация Index следующим образом:

(Предположим, что вы всегдаесть фильтр)

public ActionResult Index(ProductFilterModel filter){
    filter = filter ?? new ProductFilterModel();
    if (filter.MinPrice.HasValue)
       FilterOnMin();
    if (filter.MaxPrice.HasValue)
        AlsoFilterOnMax();
}
0 голосов
/ 11 ноября 2010

Вы используете модель представления как для отображения, так и для представления данных, так почему бы не использовать 2 конструктора, чтобы сделать ваше намерение более явным?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...