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;
}