无法访问asp.net mvc WebGrid中的辅助方法方法

时间:2015-01-25 17:35:23

标签: 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()
{
  ColumnName ="Level 0",
  CanSort=false,
  Format= @<text><a data-modal='' href="/skill/GetSkillUsers......>@(item.Level0Count()) Staff/s.</a></text>
});

我遇到以下异常:

  

&#39; System.Web.Helpers.WebGridRow&#39;不包含&#39; Level0Count&#39;

的定义

有人可以建议我如何在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);

编辑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); }
        }
    }

以下是我可以访问该项目的一些网格列定义: -

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

1 个答案:

答案 0 :(得分:1)

对于扩展方法,方法应该是静态的类,该方法也应该是静态的,它的第一个参数是this Type type这样就可以在我们要添加扩展方法的类型的成员上调用它:

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();
    }
}

请参阅this MSDN article for understanding of Extension Methods