C# 无法访问asp.net mvc WebGrid中的帮助程序方法
我已在asp.net mvc模型类中定义了此帮助器方法: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()
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