Beyto
Beyto

Reputation: 379

asp.net mvc return view pagedlist

I have below actionresult

 public ActionResult TheMostClickedEmailReport(int ID, int gonderim,int? page)
        {
            int pageIndex = page ?? 1;
            int pagesize = 10;

            MailingClickService mailingclickservice = new MailingClickService();
            TemplateLinkService tmpservice = new TemplateLinkService();
            int FirmID = (int)Session["FirmID"];
            var linkler = mailingclickservice.GetByCriteria(x => x.MailingID == ID && x.Gonderim == gonderim && x.Mailing.FirmUser.FirmID == FirmID).IslemSonucu.GroupBy(x => x.MailingEmail).ToPagedList(pageIndex, pagesize);



            ViewBag.gonderim = gonderim;
            ViewBag.MailingID = ID;

            List<EmailLinkClickReport> emailcliklistreport = new List<EmailLinkClickReport>();
            if (linkler.Count() > 0)
            {

                foreach (var item in linkler)
                {
                    EmailLinkClickReport emaillinkclick = new EmailLinkClickReport();

                    emaillinkclick.Key = item.Key;
                    emaillinkclick.TotalClicksCount = item.Select(x => x.MailingEmail).Count();
                    emailcliklistreport.Add(emaillinkclick);
                }


                return View(emailcliklistreport);
            }
            else
            {
                return RedirectToAction("MailingReport", "Report", new { id = ID, gonderim = gonderim });
            }
        }

linkler has 50 data.I select 10 data from linkler by using foreach (item in linkler)

I want to select 10 data in var linkler = mailingclickservice.GetByCriteria(x => x.MailingID == ID && x.Gonderim == gonderim && x.Mailing.FirmUser.FirmID == FirmID).IslemSonucu.GroupBy(x => x.MailingEmail).ToPagedList(pageIndex, pagesize); part

however i do not know how can i cast linkler to IPagedList by returning view ?

If i return below code

return View(emailcliklistreport);

like below

return View(emailcliklistreport.ToPagedList(pageIndex,pagesize);

it is not logic for me because I return list twice time

What do you recommend and suggest me to change my code.

How can I return linkler to view by casting ToPagedList ?

Upvotes: 1

Views: 821

Answers (1)

Chris Pratt
Chris Pratt

Reputation: 239280

ToPagedList should be the last operation your perform on your dataset before returning it to the view. As it stands, you're discarding the PagedList entirely and merely returning a List<EmailLinkClickReport> to the view.

Also, for what's worth, there's no need for a foreach loop here, anyways, as you can just use LINQ's Select method to transform your dataset. Try:

var linkler = mailingclickservice
    .GetByCriteria(x =>
        x.MailingID == ID &&
        x.Gonderim == gonderim &&
        x.Mailing.FirmUser.FirmID == FirmID)
    .IslemSonucu.GroupBy(x => x.MailingEmail)
    .Select(x => new EmailLinkClickReport
        {
            Key = x.Key;
            TotalClicksCount = x.Count();
        })
    .ToPagedList(pageIndex, pagesize);

I added liberal spacing to make it easier to read. The only new part is the Select call. Also removed the Select(x => x.MailingEmail) jazz from TotalClickCounts, as it does nothing but just add extra processing time.

Upvotes: 2

Related Questions