1

リピーターがあり、ページングが必要なので、PagedDatasource を使用しています。

与えられた:

string tag = Request.QueryString["category"];

タグ変数が空でない場合、PagedDataSource は次のエラーでページングに失敗します。

例外の詳細: System.Web.HttpException: ICollection を実装していないデータ ソースのカウントを計算できません。

この行で:

lblCurrentPage.Text = "Page: " + (CurrentPage + 1).ToString() + " of " + pagedDS.PageCount.ToString();

注: タグ変数が空の場合、ページングは​​正常に機能します。

以下の完全なコード:

string tag = Request.QueryString["category"];
var ba = new DataBase.BlogAdapter();

PagedDataSource pagedDS = new PagedDataSource();
pagedDS.AllowPaging = true;
pagedDS.PageSize = 3;

if (String.IsNullOrEmpty(tag))
{
    pagedDS.DataSource = ba.GetArticles(null, null);
}
else
{
    var t = new DataBase.Tag() { TagName = tag };
    var tec = new DataBase.TagEqualityComparer();
    pagedDS.DataSource = ba.GetArticles(null, null).Where(a => a.Tags.Contains(t, tec));
    CurrentPage = 0;
}

pagedDS.CurrentPageIndex = CurrentPage;

// NEXT LINE FAILS IF "tag" IS NOT EMPTY
lblCurrentPage.Text = "Page: " + (CurrentPage + 1).ToString() + " of " + pagedDS.PageCount.ToString(); 
4

1 に答える 1

2

おそらく、フィルターをコレクションとして実体化する必要があります。

ba.GetArticles(null, null).Where(a => a.Tags.Contains(t, tec)).ToList();

IQueryable<>を実装するだけですIEnumerableが、をIList<>実装しICollectionます。

于 2012-07-11T08:21:55.583 に答える