asp mvc checklista

0

Witam.
Nie wiem jak podejść do tematu, który sam sobie wymyśliłem.
Robię tabelkę a'la checklista która umożliwia wybranie każdego wiersza (czy to będę zmieniał atrybut html czy dodawał id wiersza do zmiennej javascript to jeszcze nie wiem). Dodany jest pager, aby za dużo wierszy się nie pojawiało na raz na stronie. Jak zakończę wybieranie wierszy klikam przycisk Zakończ i wszystkie wybranie wiersze (powiedzmy ID) powinny wrócić do kontrolera.

  1. Jak przekazać wszystkie wybranie wiersze z [1] strony na [2] itd.?
  2. Jak przekazać wybrane wiersze do kontrolera?
1

Wsadź id wierszy do jakiegoś hidden inputa na formie (np. oddzielone średnikami), po wciśnięciu submita prześlą się do kontrolera, skąd odeślesz je na kolejną stronę/zapiszesz do bazy, czy co tam chcesz.
Możesz też doczytywać strony do grida ajaxowo, wtedy nie potrzebujesz przesyłania niczego między stronami. Jest nawet do tego milion gotowych bibliotek.

0

Dzięki za odpowiedź. Zrobiłem tak:
Wiersze w tabeli generują mi się tak (używam guidów zamiast id):

<tr onclick="rowClicked(this,'ba6e6609-697a-4db0-9848-a1a3974b693a')">...</tr> 

Sam pager u dołu strony tak:

<div class="pager">
   <form id="postPager" action="/MojKontroler/Przypisz" method="post" novalidate="novalidate">
        <a class="selected" onclick="pagerClicked(this);" value="1">1</a>...(kolejne strony)
        <input name="SelectedRows" id="SelectedRows" type="hidden" value="">
        <input name="pageNo" id="pageNo" type="hidden" value="1">
   </form>
</div>

JavaScript na obsłużenie kliknięcia wiersza (usuwa lub dodaje guidy do inputa):

function rowClicked(caller,guid) {
    var sInput = $("#SelectedRows");
    var sVal = sInput.val();
    if (sVal.indexOf(guid)>=0) {
        sVal = sVal.replace(guid + ";", "");
        $(caller).removeClass("selected");
    } else {
        sVal += guid + ";";
        $(caller).addClass("selected");
    }
    sInput.val(sVal);
}

JavaScript obsługujące kliknięcie pagera z numerem strony (pobranie klikniętego numerka, zapisanie do inputa i wysłanie formularza):

function pagerClicked(caller) {
    var page = caller.getAttribute("value");
    $("#pageNo").val(page);
    document.getElementById("postPager").submit();
}

No i same akcje w kontrolerze:

[HttpGet]
public ActionResult Przypisz(int page=1)
{
    MojModel model = GetMojModel();
    ....       
    return View(model);
}
[HttpPost]
[ActionName("Przypisz")]
public RedirectToRouteResult PrzypiszPost(string SelectedRows, string pageNo)
{
    MojModel model = GetMojModel();
    List<Guid> guids = SelectedRows
       .Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries)
       .Select(guid => new Guid(guid)).ToList();
    model.Selected = guids;
    return RedirectToAction("AddPersons", new
       {
            page = Convert.ToInt32(pageNo)
       });
}

No i na koniec funkcja która pobiera obiekt MojModel z sesji, ewentualnie tworzy nowy.

private MojModel GetMojModel()
{
  MojModel mm= (MojModel)Session["mm"];
  if (mm != null) return mm;
  mm = new MojModel{.... }
  Session["mm"] = mm;
  return mm;
}
0

Nie rozumiem chyba tylko tego, czemu trzymasz MojModel w sesji... Co tam takiego jest, że tak robisz?

0

W MojModel trzymam listę wybranych guidów

1 użytkowników online, w tym zalogowanych: 0, gości: 1