1

我正在使用 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值。

有人可以解释我为什么吗?

4

2 回答 2

1

使用 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 的 Filters 部分将使用输入框中的值填充。如果没有值,您将有一个必须检查的零长度字符串。

该列需要启用过滤。构建器必须启用过滤。列名称必须与 data-mvcgrid-option 名称匹配。

设置完所有这些内容后,您应该会在 QueryOptions 的 Filter 部分中看到输入的值。

知道这已经晚了,希望这会有所帮助。

于 2018-04-20T15:08:32.013 回答
-2

查看 URL 以查看正在发送的变量并在其中进行相应设置options.GetFilterString(******).

为我工作。

于 2016-09-02T10:09:52.517 回答