Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

ASP.NET MVC 2 problem sa pageing

[es] :: .NET :: ASP.NET :: ASP.NET MVC 2 problem sa pageing

Strane: 1 2

[ Pregleda: 5750 | Odgovora: 30 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

android~paranoid

Član broj: 81947
Poruke: 211
*.adsl.eunet.rs.



Profil

icon Re: ASP.NET MVC 2 problem sa pageing02.10.2010. u 19:29 - pre 164 meseci
Citat:
Toxter: Pa upravo to. Posalje id, pageNumber i pomocu Ajaxa povuce samo tu kolekciju.
U akciji kontrolera iscupa potrebne elemente kolekcije i vrati PartialView. A na kraju taj partial view samo umetne u odredjeni <div> koji je placeholder za listu.

Jednostavno.


Tako nešto sam i uradio, sa tim da koristim isti kod za formiranje tih delova kolekcije kao i bez AJAX-a.

Code:

    <% using (Ajax.BeginForm("ListaAjax", new { page = 1 },
    new AjaxOptions { UpdateTargetId = "results" }))
    { %>
    <%=Html.TextBox("query",null, new {size=40}) %>
    
    <input type="submit" />

    <div id="results">
       <% Html.RenderPartial("ListaSearchResults", ViewData.Model);%>
    </div>

    <% for (int i = 1; i < Model.brojStranica + 1; i++ )
    { %>
              
      <%: Ajax.ActionLink(i.ToString(), "ListaAjax", new { page = i }, new AjaxOptions { UpdateTargetId = "results" })%>

    <% } %>

    <%} %>


Kako mogu da napravim da kad se klikne na broj stranice ne pomeri cela stranica?

Mislim, šta reći !
 
Odgovor na temu

Toxter
NS

Član broj: 39393
Poruke: 317
*.dynamic.isp.telekom.rs.



+6 Profil

icon Re: ASP.NET MVC 2 problem sa pageing02.10.2010. u 19:58 - pre 164 meseci
Tako sto ce ti linkovi koji su u stvari page number biti nesto slicno ovome:
Code:
<a href="#" onclick="goToPage(1)">1</a>


ovo gotopage(1) (broj unutar predstavlja u stvari stranicu) generises na tvom View-u (ili direktno koristeci for petlju, ili sto je cistije pomocu html helpera, koristeci TagBuilder).

Zatim definises javascript funkciju:
Code:
function goToPage(pageNum){
//ovde najbolje pomocu jQuery-ja pozovi preko Ajax-a akciju tvog kontolera koja ti vraca PartialView (tj. samo kolekciju koja se menja a ne citav Model)
}


Pozdrav
Sad mu nije nista, ubio si ga k'o zeca...
 
Odgovor na temu

branimir.ts
Beograd

Član broj: 56661
Poruke: 127
*.adsl-a-7.sezampro.rs.

Sajt: www.geocities.com/brankob..


Profil

icon Re: ASP.NET MVC 2 problem sa pageing03.10.2010. u 12:53 - pre 164 meseci
@android~paranoid
Citat:
public ActionResult ListaStranica(int page, Collection<Product> Lista)
Pitanje je kako da prosledim ovoj metodi Listu iz View-a?


@mmix
Citat:
JA nisam siguran da je to moguce, mislim da precenjujes sposobnosti MVCa :)

Ti si bas hejter sto se tice Ms tehnologija, pa ih mozda zato i potcenjujes - cekaj, nemoj unapred :)

Evo (samo jednog od nacina) kako moze da se dobije tipizirana lista u metodi kontrolera slanjem parametara iz view-a:

Jedna stavka koja je cesto overlooked u asp net mvc je ModelBinder - mehanizam koji omogucava mapiranje
raw http requesta u parametre action metoda controllera. Svaki put kada do kontrolera stigne http request u key/value formi, poziva se
DefaultModelBinder koji omogucava da se raw http request pretvori u nesto "opipljivije", typed net objekat recimo (sto ce u nasem slucaju biti lista) objekata).
E ako zelimo da customizujemo nacin na koji ce se http request mapirati u parametre metoda, potrebno je, koliko znam da se uradi sledece:

Primer modela:
Code:

public class NewsPaper
{
      public string Make { get; set; }
       public int Id { get; set; }
 
       public static List<NewsPaper> GetNewsPapers()
       {
            return new List<NewsPaper>
                           {
                               new NewsPaper { Id = 1, Make = "Blic"},
                               new NewsPaper { Id = 2, Make = "Novosti"},
                               new NewsPaper { Id = 3, Make = "Politika"}
                           };
       }
}

Zatim metod kontrolera:
Code:

[HttpPost]
public ActionResult PostNewsPapers(List<NewsPaper> newspapers)
{
      return .....
}


E sada ako imas multi select html kontrolu post na ovu metodu ne bi radio (naravno).
Zato pravimo klasu koja ce implementirati IModelBinder interface
Code:

public class SelectListModelBinder : IModelBinder
{
        public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            var incomingData = bindingContext.ValueProvider.GetValue("newspapers").AttemptedValue;
            return incomingData.Split(new char[1] { ',' }).Select
                    (data => NewsPaper.GetNewsPapers().
                            FirstOrDefault(o => o.Id == int.Parse(data))).ToList();
        }
}

Imamo referencu bindingContext i u njoj Request.Form vrednosti multiple select liste. Odatle vracamo NewsPaper objekat popunjen poslatim vrednostima.

U Application_Start() registrujemo:
Code:
ModelBinders.Binders.Add(typeof (List<NewsPaper>), new SelectListModelBinder());


Da bi smo koristili custom model binder potrebno je postaviti prefix u metodu kotrolera, ispred tipizirane liste
Code:

public ActionResult PostNewsPapers([ModelBinder(typeof(SelectListModelBinder))] List<NewsPaper> newspapers)
{
      .....
}


Ovo je proof of concept za neke use casove, prilicno interesantno i ne bas jako tesko :)

Postoje i drugi nacini da se ovo uradi, ali drugi put :)

[Ovu poruku je menjao branimir.ts dana 03.10.2010. u 14:09 GMT+1]
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: ASP.NET MVC 2 problem sa pageing03.10.2010. u 13:32 - pre 164 meseci
Kako njemu to pomaze sa ovim problemom?

Kako izgleda ti njemu predlazes da celu listu (svih stranica) prosledi HTML stranici, da je onda postuje nazad serveru da bi isti kroz modelbinder napravio parametar za action metod? I to je jednostavnije i bolje od ponovnog ucitavanja sa SQLa ili cak server side kesiranja?

I nisam hejter MS tehnologija vec hejter fanbojizma bilo koje vrste, ukljucujuci i MSa.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

branimir.ts
Beograd

Član broj: 56661
Poruke: 127
*.adsl-a-7.sezampro.rs.

Sajt: www.geocities.com/brankob..


Profil

icon Re: ASP.NET MVC 2 problem sa pageing03.10.2010. u 14:04 - pre 164 meseci
Citat:
Kako njemu to pomaze sa ovim problemom?


Nadam se da shvatas da ovo nema primenu kod pagiranja - samo mala demonstracija (jednog) extensibility pointa kod MVC frameworka.
Covek je lepo pitao da li je moguce da se uradi ovako nesto :)

A kako bih ja izveo ovo pagiranje, reci cu ti odmah - ne bih se petljao na ovakav nacin kao sto toxter i on rade, vec bih:
U modelu definisao
Code:

public interface IPageableInfo
    {
        int PageCount { get; set; }
        int PageIndex { get; set; }
    }

    public interface IPageable<T> : IPageableInfo
    {
        IEnumerable<T> Page { get; set; }
    }

2. U controlleru
Code:

public ActionResult Index(int? page)
        {
            return View(service.GetPageable(page ?? 1, 10));//vraca strongly typed IPageable<T>
        }

3. U view-u custom extenzija
Code:
        
  <%=Html.Pagination() %>
 


 
Odgovor na temu

android~paranoid

Član broj: 81947
Poruke: 211
*.adsl.eunet.rs.



Profil

icon Re: ASP.NET MVC 2 problem sa pageing03.10.2010. u 20:46 - pre 164 meseci
Citat:
Toxter
ovo gotopage(1) (broj unutar predstavlja u stvari stranicu) generises na tvom View-u (ili direktno koristeci for petlju, ili sto je cistije pomocu html helpera, koristeci TagBuilder).


Ok, ovo sam uradio baš preko helpera i dobio.

Citat:
[url=/p2707650]
Zatim definises javascript funkciju:
Code:
function goToPage(pageNum){
//ovde najbolje pomocu jQuery-ja pozovi preko Ajax-a akciju tvog kontolera koja ti vraca PartialView (tj. samo kolekciju koja se menja a ne citav Model)
}

Pozdrav


Nešto sam pokušavao ali ne ide mi baš:

Code:

       function goToPage(pageNum) {
           $('#results').load("ListaAjax", pageNum);
       }


Ovo je kod na Master page, uljučio sam i MicrosoftAjax.js .

Ako može pomoć.
Mislim, šta reći !
 
Odgovor na temu

Toxter
NS

Član broj: 39393
Poruke: 317
*.dynamic.isp.telekom.rs.



+6 Profil

icon Re: ASP.NET MVC 2 problem sa pageing03.10.2010. u 21:35 - pre 164 meseci
Nesto ovako (pisem iz glave pa mozda ima nekih sintaksnih gresaka):
Code:


function goToPage(pageNum) {
$.ajax({
    url: pagingControllerActionUrl,   //ovo je lokacija tvoje akcije kontrolera, npr http://localhost/App1/People/GetList
    data: "id=" + pageNum,
    success: function(result) {
      $('#listDiv').html(result.toString());  //ovo smesta partial view u tvoj listDiv (koji je samo placeholder)
    }
  });
}     


I onda moras imati akciju GetList u kontrolleru PeopleController:
Code:

public ActionResult GetList(int id)
{
  List<People> list = ... //iscupas kolekciju za pageNum == id
  return PartialView("MyListPartialView", list);
}


P.S. za sada koristi ovaj pristup sa id kao parametrom akcije. Ako si malo iskusniji, znaces kako da definises rutu pa ovaj default id mozes promeniti.

Pozdrav


Edit: Naravno, moras imati partial view MyListPArtialView.ascx koji zna da renderuje kolekciju List<People> (ili vec koja ti je kolekcija).
Sad mu nije nista, ubio si ga k'o zeca...
 
Odgovor na temu

android~paranoid

Član broj: 81947
Poruke: 211
*.adsl.eunet.rs.



Profil

icon Re: ASP.NET MVC 2 problem sa pageing04.10.2010. u 08:08 - pre 164 meseci
Citat:
Toxter: Nesto ovako (pisem iz glave pa mozda ima nekih sintaksnih gresaka):
[code]



Šljaka i to brže nego kad nije preko AJAX-a, ali ne radi ono što sam ja mislio, opet mi pomeri stranu, tj. klizač na gore kad odaberem stranu.

Mislim, šta reći !
 
Odgovor na temu

Toxter
NS

Član broj: 39393
Poruke: 317
82.117.202.*



+6 Profil

icon Re: ASP.NET MVC 2 problem sa pageing04.10.2010. u 08:31 - pre 164 meseci
Koji "klizac" ?

Ako mislis na scroll bar, to ti je je najverovatnije css-ovski scroll jer imas negde overflow:auto.
Ali, ovako definitivno bi trebalo da ti ucita sledecu stranu, tako da scroll bar i treba da pocinje sa vrha.

Ili ja ne shvatam sta pokusavas da postignes?

Pozdrav,
Sad mu nije nista, ubio si ga k'o zeca...
 
Odgovor na temu

android~paranoid

Član broj: 81947
Poruke: 211
*.adsl.eunet.rs.



Profil

icon Re: ASP.NET MVC 2 problem sa pageing05.10.2010. u 07:38 - pre 164 meseci
Citat:
Toxter: Koji "klizac" ?

Ako mislis na scroll bar, to ti je je najverovatnije css-ovski scroll jer imas negde overflow:auto.
Ali, ovako definitivno bi trebalo da ti ucita sledecu stranu, tako da scroll bar i treba da pocinje sa vrha.

Ili ja ne shvatam sta pokusavas da postignes?

Pozdrav,


U ASP.NET je:

Page.MaintainScrollPositionOnPostBack = true;

Mislim, šta reći !
 
Odgovor na temu

android~paranoid

Član broj: 81947
Poruke: 211
*.adsl.eunet.rs.



Profil

icon Re: ASP.NET MVC 2 problem sa pageing10.10.2010. u 19:18 - pre 164 meseci
Citat:
Toxter: Tako sto ce ti linkovi koji su u stvari page number biti nesto slicno ovome:
Code:
<a href="#" onclick="goToPage(1)">1</a>


ovo gotopage(1) (broj unutar predstavlja u stvari stranicu) generises na tvom View-u (ili direktno koristeci for petlju, ili sto je cistije pomocu html helpera, koristeci TagBuilder).



Ovo je ok, link mi je http://localhost/Controller/Action# , ali kad odem sa recimo druge stranice (iz broja stranica) na neku treću (recimo link iz jednog reda zapisa) i vratim se sa back (browsera) on ne ostane na toj drugoj strani, već bude na prvoj. Gde da tražim rešenje problema?

Mislim, šta reći !
 
Odgovor na temu

[es] :: .NET :: ASP.NET :: ASP.NET MVC 2 problem sa pageing

Strane: 1 2

[ Pregleda: 5750 | Odgovora: 30 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.