使用MvcGrid.绑定过滤器MVC的Net错误

本文关键字:Net 错误 MVC 过滤器 MvcGrid 绑定 使用 | 更新日期: 2023-09-27 17:55:04

我使用MvcGrid。净

这是我的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

谁能给我解释一下为什么?

使用MvcGrid.绑定过滤器MVC的Net错误

使用MVCGrid时。. Net中,必须确保在MVCGridConfig.cs中设置了表定义。

过滤的关键元素有:

在声明列时,必须确保在列定义中添加了以下代码—
.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- mvgrid -option名称匹配。

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

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

查看URL,查看正在发送的变量/s,并相应地在options.GetFilterString(******).中设置