Использование ошибки 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(******).
Работал на меня.