2015-09-14 26 views
6

Yani .. List sahip bir sınıf var. Bu şekilde alacaksınızListaged olarak onay kutusu ile IPagedList Ciltleme

[HttpGet] 
[Authorize(Roles="user")] 
[CustomChecker] 
public ActionResult Index(int? page, int id=0) 
{ 
    EmployeeContext emp = new EmployeeContext(); 
    student st = emp.students.Single(x=>x.id ==id); 

    @ViewBag.id = st.id; 

    return View(st.subjSel.ToPagedList(page ?? 1, 4)); 
} 

Sonra Görünüm: aşağıda kodu gibi görünümüne geçmek

@using PagedList; 
@using PagedList.Mvc; 
@model PagedList<MvcApplication6.Models.subject> 
<div style="font-family:Arial"> 
    <fieldset> 
     <legend><h3>Open Classes</h3></legend> 
     @using (Html.BeginForm("Test", "Enrollment")) 
     { 
      <input type="hidden" name="id" value="@ViewBag.id" /> 
      <table border="1"> 
       <tr> 
        <th>@Html.LabelFor(model => model[0].subj)</th> 
        <th>@Html.LabelFor(model => model[0].days)</th> 
        <th>@Html.LabelFor(model => model[0].cstart)</th> 
        <th>@Html.LabelFor(model => model[0].cend)</th> 
        <th>@Html.LabelFor(model => model[0].professor)</th> 
        <th>@Html.LabelFor(model => model[0].units)</th> 
        <th>@Html.CheckBox("test") Select all</th> 
       </tr> 
       @for (int i = 0; i < Model.Count; i++) 
       { 
        <tr> 
         @Html.HiddenFor(model => model[i].id) 
         <td> 
          @Html.DisplayFor(m => m[i].subj) 
          @Html.HiddenFor(m => m[i].subj) 
         </td> 
         <td> 
          @Html.DisplayFor(m => m[i].days) 
          @Html.HiddenFor(m => m[i].days) 
         </td> 
         <td> 
          @Html.DisplayFor(m => m[i].cstart) 
          @Html.HiddenFor(m => m[i].cstart) 
         </td> 
         <td> 
          @Html.DisplayFor(m => m[i].cend) 
          @Html.HiddenFor(m => m[i].cend) 
         </td> 
         <td> 
          @Html.DisplayFor(m => m[i].professor) 
          @Html.HiddenFor(m => m[i].professor) 
         </td> 
         <td> 
          @Html.DisplayFor(m => m[i].units) 
          @Html.HiddenFor(m => m[i].units) 
         </td> 
         <td> 
          @Html.CheckBoxFor(m => m[i].isSelected) 
         </td> 
        </tr> 
       } 
      </table> 
      <br /> 
      <br /> 
      <table> 
       <tr><td align="center" width="500px"></td></tr> 
       <tr> 
        <td align="center" width="500px"> 
         <input type="submit" value="submit" /> | <input type="button" value="clear" /> 
        </td> 
       </tr> 
      </table> 
      <br /> 
      <br /> 
     } 
    </fieldset> 
</div> 
@Html.PagedListPager(Model, page => Url.Action("Index", "Enrollment", new { page, id = Request.QueryString["id"] })) 

Benim sorunum bu [0].subj ve bu won'dan gibi icra edileceğini olduğu Bağlanmama izin ver çünkü name[0].subj gibi bir şey olmalı.

Yeni yöntemler denedim ve denedim, bunları düzgün bir şekilde bağlama konusunda herhangi bir yol var mı? Ben Html Helpers kullanmak istiyorum ve mümkün olduğunca, bu bölüm için özel bir yeniden uygulamak istemiyorum.

Bu, bağlı olmaları gereken işlevdir. Bu sınıf öğrenci List (i IPagedList dönüştürülen tane)

[HttpPost] 
[Authorize(Roles="user")] 
public ActionResult Test(student st) 

vardır Ve bu benim View benziyor nasıl. Seçimler için CheckBoxFor kullanıyorum. enter image description here

Ekstra soru: Gezinmemi Nasıl yani çok çirkin görünüyor?

+0

'a geri gönderin. [0] .subj' ('name [0] .subj' değil) olması gerekir. PagedList '' student' değil, bu, POST yönteminin IEnumerable '' student' değil olması gerektiği anlamına gelir. Alternatif olarak, POST yönteminde “öğrencinin” olmasını istiyorsanız, görünümdeki modelin “öğrenci” olması gerekir. –

+0

Ancak 'student' için herhangi bir denetim oluşturmuyorsunuz ('id' özelliği dışında), böylece bir yol değeri olarak kolayca eklenebilecek ve böylece –

+0

POST yöntemine sahip olacaksınız. Yani eğer [0] .subj' o zaman IEnumerable 'olmalıdır? –

cevap

1

modeli görünümü de öğrenci ID özelliği gerekiyorsa GET beri sonra ek bir parametre

[HttpPost] 
public ActionResult Test(IEnumerable<subject> model, int ID) 

dahil

[HttpPost] 
public ActionResult Test(IEnumerable<subject> model) 

olmalıdır parametreyi yani @model PagedList<subject> olduğu yöntem, int ID parametresine sahiptir ve varsayılan yönlendirmeyi kullandığınızı varsayarak, kimlik action özniteliğine eklenecektir, yani action="/Enrollment/Test/2" değerini I D, 2. Değilse,

@using (Html.BeginForm("Test", "Enrollment", new { ID = ViewBag.id })) 

Alternatif bir görünüm modeli

public class StudentVM 
{ 
    public int ID { get; set; } 
    public PagedList<student> Students { get; set; } 
} 

kullanabileceğiniz bir yol parametre olarak bu ekleyebilir ve GET metodu

public ActionResult Index(int? page, int id=0) 
{ 
    EmployeeContext emp = new EmployeeContext(); 
    student st = emp.students.Single(x=>x.id ==id); 
    StudentVM model = new StudentVM() 
    { 
    ID = id, 
    Students = st.subjSel.ToPagedList(page ?? 1, 4) 
    }; 
    return View(model); 
} 

ve tabanında üzerinde görüntülemek modeli görüntüleyin ve public ActionResult Test(StudentVM model)

+0

bu oldukça fazla, çok teşekkür ederim. –

+0

Konu dışı konu dışında, onay kutularının durumunu korumanın mümkün olduğunu düşünüyor musunuz (bunlar gösterilmemeli olsalar bile gönderimime iletilirse dahil edilmelidir. Sayfa 1'den bir şey kontrol edip sonra da taşınmış olurum) Çalıştığım sonraki aşama. Benim modelim üzerinde çalışmam gerektiğine dair bir fikrim var çünkü benim modelim 'PageList' değil' list '. Ben sadece onları dönüştürdüm. –

+0

Ne sorduğundan emin değilsin. "Seçilmiş" değerleri geri gönderilecek. Eğer bir sayfada biraz kontrol edecekseniz, bir sonraki sayfaya gidin, o zaman değerlerin bir yerde (örn. Oturum) –

1

subject listenizi geri almak için, buna uygun bir önek uygulamalısınız. içeren Student mülkiyet adına bu yana List<subject>subjSel olduğunu ve böyle öneki belirlesin böylece for ifadesinden önce, bir Student nesnesine içine eylem değerlerini almak istiyorum: modelinin

@{ViewData.TemplateInfo.HtmlFieldPrefix = "subjSel";} 

Yani fileds olacak subjSel[0].fieldname gibi isimlerle işlenmelidir.

Ardından, işleminiz sırasında, st'un subjSel özelliğindeki konuları alacaksınız.

Ek Kaynak: Ekstra soru için

:

render kod çağrı ile ilgili uygun tarz ve stil etiketleri varsa Kontrol olmuştur sayfa içinde işlenir.

+0

Yani bu kodu eklemem gerekiyor mu? –

+0

Kodunuzda gördüğüm gibi, bu tek değişiklik –

+0

Garip, 'subjSel gibi işleniyor. [0] .subj' –