C# 无法访问asp.net mvc WebGrid中的帮助程序方法

C# 无法访问asp.net mvc WebGrid中的帮助程序方法,c#,asp.net,asp.net-mvc,asp.net-mvc-4,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Asp.net Mvc 5,我已在asp.net mvc模型类中定义了此帮助器方法: public partial class Skill { public int Level0Count() { return SkillLevelStaffs.Where(a => a.Level.Name.Contains("0")).Count(); } 但当我尝试访问WebGrid中的Level0count()扩展方法时,如下所示: gridcolumns.Add(new WebGridColumn()

我已在asp.net mvc模型类中定义了此帮助器方法:

public partial class Skill
{
  public int Level0Count()
  {
    return SkillLevelStaffs.Where(a => a.Level.Name.Contains("0")).Count();
  }
但当我尝试访问WebGrid中的Level0count()扩展方法时,如下所示:

gridcolumns.Add(new WebGridColumn()
{
  ColumnName ="Level 0",
  CanSort=false,
  Format= @<text><a data-modal='' href="/skill/GetSkillUsers......>@(item.Level0Count()) Staff/s.</a></text>
});
添加(新的WebGridColumn() { ColumnName=“级别0”, CanSort=false, 格式=@ }); 我得到了以下例外:

“System.Web.Helpers.WebGridRow”不包含“Level0Count”的定义

有人能告诉我如何在asp.net mvc webGrid中访问扩展方法吗

编辑

我可以按如下方式访问项目,没有任何问题:-

 var gridcolumns = new List<WebGridColumn>();
        gridcolumns.Add(new WebGridColumn() { ColumnName = "Name", Header = Html.DisplayNameFor(model => model.Content.FirstOrDefault().Name).ToString(),CanSort=true });
        gridcolumns.Add(new WebGridColumn()
        {
            ColumnName = "Customer",
            CanSort = false,
            Format =             
                 @<text>
            @if (item.IsAllCustomer)
            {<span>All</span>}
            else
            {
                foreach (var c in ((IEnumerable<SkillManagementTDMGroup.Models.Customer>)item.Customers).OrderByDescending(a=>a.Name))
                {
   <span class="glyphicon glyphicon-arrow-right"> </span> @(c.Name)<br />
                }
            }            

                   </text>});

  var grid = new WebGrid(
                        canPage: true,
                        rowsPerPage: Model.PageSize,
                        canSort: true,
                        ajaxUpdateContainerId: "grid");

            grid.Bind(Model.Content, rowCount: Model.TotalRecords, autoSortAndPage: false);
            grid.Pager(WebGridPagerModes.All);
var gridcolumns=new List();
添加(新WebGridColumn(){ColumnName=“Name”,Header=Html.DisplayNameFor(model=>model.Content.FirstOrDefault().Name).ToString(),CanSort=true});
添加(新的WebGridColumn()
{
ColumnName=“客户”,
CanSort=false,
格式=
@
@如果(项目IsAllCustomer)
{All}
其他的
{
foreach(varc在((IEnumerable)item.Customers.OrderByDescending(a=>a.Name))中)
{
@(c.名称)
} } }); var grid=新的WebGrid( 坎佩奇:没错, rowsPerPage:Model.PageSize, 坎索特:没错, ajaxUpdateContainerId:“网格”); 绑定(Model.Content,行数:Model.TotalRecords,autoSortAndPage:false); Pager(WebGridPagerModes.All);
编辑2

下面是我要传递到网格的模型:-

 public class PagedList<T>
    {
        public List<T> Content { get; set; }

        public Int32 CurrentPage { get; set; }
        public Int32 PageSize { get; set; }
        public int TotalRecords { get; set; }
        public bool OnlyActive { get; set; }
        public int? masterDetail { get; set; }
        public int TotalPages
        {
            get { return (int)Math.Ceiling((decimal)TotalRecords / PageSize); }
        }
    }
公共类页面列表
{
公共列表内容{get;set;}
公共Int32 CurrentPage{get;set;}
公共Int32页面大小{get;set;}
公共整数TotalRecords{get;set;}
公共bool OnlyActive{get;set;}
公共int?主细节{get;set;}
公共网页
{
获取{return(int)Math.天花((十进制)TotalRecords/PageSize);}
}
}
下面是一些网格列定义,我可以在其中访问该项:-

var gridcolumns = new List<WebGridColumn>();
gridcolumns.Add(new WebGridColumn() { ColumnName = "Name", Header = Html.DisplayNameFor(model => model.Content.FirstOrDefault().Name).ToString(),CanSort=true });
gridcolumns.Add(new WebGridColumn()
            {
                ColumnName = "Customer",
                CanSort = false,
                Format =             
                     @<text>
                @if (item.IsAllCustomer)
                {<span>All</span>}
                else
                {
                    foreach (var c in ((IEnumerable<SkillManagementTDMGroup.Models.Customer>)item.Customers).OrderByDescending(a=>a.Name))
                    {
       <span class="glyphicon glyphicon-arrow-right"> </span> @(c.Name)<br />
                    }
                }            

                       </text>});
            if (Model.masterDetail.HasValue)
            {
                gridcolumns.Add(new WebGridColumn()
                {
                    ColumnName = "Staff Level",
                    CanSort = false,
                    Format =

                  @<text>
              //code goes here
    gridcolumns.Add(new WebGridColumn() { ColumnName ="Description",Header = Html.DisplayNameFor(model => model.Content.FirstOrDefault().Description).ToString(),CanSort=true});



    gridcolumns.Add(new WebGridColumn() { ColumnName ="Level 0",CanSort=false,Format=

                  @<text>
    <a data-modal='' href="/skill/GetSkillUsers/@(item.SkillID)?levelID=@allLevels.SingleOrDefault(a2=>a2.Name.Contains("0")).LevelID"  id= "@item.SkillID" title='GetListUser'>   
     @(item.Level0Count()) Staff/s.</a>    
                </text>});
    //code goes here
                var grid = new WebGrid(
                            canPage: true,
                            rowsPerPage: Model.PageSize,
                            canSort: true,
                            ajaxUpdateContainerId: "grid");

                grid.Bind(Model.Content, rowCount: Model.TotalRecords, autoSortAndPage: false);
                grid.Pager(WebGridPagerModes.All);

                @grid.GetHtml(htmlAttributes: new { id = "grid" },   // id for ajaxUpdateContainerId parameter
                fillEmptyRows: false,
                tableStyle: "table table-bordered table-hover",
                mode: WebGridPagerModes.All,
                columns: gridcolumns
var gridcolumns=new List();
添加(新WebGridColumn(){ColumnName=“Name”,Header=Html.DisplayNameFor(model=>model.Content.FirstOrDefault().Name).ToString(),CanSort=true});
添加(新的WebGridColumn()
{
ColumnName=“客户”,
CanSort=false,
格式=
@
@如果(项目IsAllCustomer)
{All}
其他的
{
foreach(varc在((IEnumerable)item.Customers.OrderByDescending(a=>a.Name))中)
{
@(c.名称)
} } }); if(Model.masterDetail.HasValue) { 添加(新的WebGridColumn() { ColumnName=“员工级别”, CanSort=false, 格式= @ //代码在这里 添加(新WebGridColumn(){ColumnName=“Description”,Header=Html.DisplayNameFor(model=>model.Content.FirstOrDefault().Description).ToString(),CanSort=true}); 添加(新WebGridColumn(){ColumnName=“Level 0”,CanSort=false,格式= @ }); //代码在这里 var grid=新的WebGrid( 坎佩奇:没错, rowsPerPage:Model.PageSize, 坎索特:没错, ajaxUpdateContainerId:“网格”); 绑定(Model.Content,行数:Model.TotalRecords,autoSortAndPage:false); Pager(WebGridPagerModes.All); @GetHtml(htmlAttributes:new{id=“grid”},//ajaxUpdateContainerId参数的id fillEmptyRows:false, tableStyle:“表格边框表格悬停”, 模式:WebGridPagerModes.All, 列:gridcolumns
对于扩展方法方法所在的类应该是静态的,并且该方法也应该是静态的,它的第一个参数是
此类型
,以便可以在我们为其添加扩展方法的类型的成员上调用它:

public static class Skill 
{ 
    public static int Level0Count(this WebGridRow webGridRow)
    {
         // extension method code here
        return SkillLevelStaffs.Where(a => a.Level.Name.Contains("0")).Count();
    }
}

请参见

这不是一种扩展方法:a)它不是静态的;b)它不在静态类中;c)它没有带有
这个
修饰符的第一个参数。它只是
技能
类中的一个普通方法。请注意,错误表明它在
WebGridRow
中查找,而不是
技能
…也许您需要更改
的声明方式?@JonSkeet抱歉,我指的是助手方法不是扩展方法,但不管名称如何,我都无法在网格中访问它,而我可以在普通视图中访问它。项目到底是什么?您忽略了显示它的声明。查看错误消息,它似乎在说项目的类型是WebGridRow,而不是Skill。网格中使用项目来访问每个grid行…因此示例我可以写item.Name,,因此我将获得模型项的名称您仍然没有包括项的声明…您问题中最重要的部分..发生错误的一件事..您拒绝包括这一简单的信息,这将极大地帮助您获得答案,但UBBORLY拒绝提供…为什么?对不起,我是说helper方法而不是extension方法。但是当我尝试在WebGrid中访问它时,我会得到一个错误。但是如果我尝试在普通视图中访问它,我会通过eimp正确地得到返回的int