Использование ошибки MvcGrid.Net при связывании фильтров MVC

Я использую MvcGrid.Net

Вот моя cshtml страница

<div class="well">
    <div class="form-inline">
        <div class="form-group">
            <input type="text" class="form-control" placeholder="Opprtunity ID" data-mvcgrid-type="filter" data-mvcgrid-option="opprtunityid" />
        </div>
        <div class="form-group">
            <input class="form-control" placeholder="Cluster" data-mvcgrid-type="filter" data-mvcgrid-option="Cluster" />
        </div>
        <button type="button" class="btn btn-default" data-mvcgrid-apply-filter="click">Apply</button>
   </div>
</div>

У меня есть две простые кнопки поиска. Когда я могу попытаться связать их с файлом конфигурации сетки MVC, я не вижу значения в QueryOptions,

Вот мои параметры сетки:

.WithRetrieveDataMethod((context) =>
     {
         var options = context.QueryOptions;
         int totalRecords;
         var repo = DependencyResolver.Current.GetService<General>();
         string sortColumn = options.GetSortColumnData<string>();
         var items = repo.GetData(out totalRecords,
                        options.GetFilterString("opprtunityid"),
                        options.GetFilterString("Cluster"),
                        //active,
                        options.GetLimitOffset(),
                        options.GetLimitRowcount(),
                        sortColumn, options.SortDirection == SortDirection.Dsc);
         return new QueryResult<SourcedPartner>()
         {
             Items = items,
             TotalRecords = totalRecords
         }

options.GetFilterString ("opprtunityid") здесь у меня есть null значение.

Может кто-нибудь объяснить мне, почему?

2 ответа

При использовании MVCGrid.Net вы должны убедиться, что вы установили определение таблицы в MVCGridConfig.cs .

Ключевые элементы фильтрации:

1) При объявлении столбца необходимо убедиться, что вы добавили следующий код в определение столбца:

.AddColumns(cols => {
     cols.Add("opportunityid").WithVisibility(false)
         .WithFiltering(true)      // MUST have filtering enabled on column definion, otherwise it will not appear in QueryOptions
         .WithValueExpression(i => i.OpportunityID);
     cols.Add("Cluster").WithHeaderText("Cluster")
         .WithFiltering(true)
         .WithVisibility(false)
         .WithAllowChangeVisibility(true)
         .WithValueExpression(i => i.Cluster);

2) Вы должны обязательно включить фильтрацию как часть вашей конструкции MVCGridBuilder -

MVCGridDefinitionTable.Add("Filtered", new MVCGridBuilder<SourcedPartner>()
      .AddColumns(....)
      .WithSorting(true, "MySortedColumnName")
      .WithFiltering(true) // This lets the GridContext know that something will populate QueryOptions.Filters section
      .WithRetrieveDataMethod((context) => 
          {
             var options = context.QueryOptions;
             string opID = options.GetFilterString("opprtunityid");
             string cluster = options.GetFilterString("Cluster");
             .......
            });

Когда вы отлаживаете свой код, часть "Фильтры" в QueryOptions будет заполнена вашими значениями из полей ввода. Если значения нет, у вас будет строка нулевой длины, которую вы должны проверить.

В столбце должна быть включена фильтрация. В сборщике должна быть включена фильтрация. Имя столбца должно соответствовать имени опции data-mvcgrid-option.

Когда все это настроено, вы должны увидеть значение ваших входных данных в разделе "Фильтр" в QueryOptions.

Знай, что уже поздно, надеюсь, это поможет.

Посмотрите в URL, чтобы увидеть, какие переменные / ы отправляются и установлены соответственно в options.GetFilterString(******).

Работал на меня.

Другие вопросы по тегам