我在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
答案 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();
}
}