2012-12-04 13 views
5

Próbowałem ustalić, w jaki sposób mogę uzyskać listę zaznaczonych pól wyboru do działania przy użyciu ActionLinka. Myślę, że muszę zrobić coś z klientem przy pomocy JavaScript, ale nie mogę znaleźć odpowiedniego kodu.Jak wysłać listę zaznaczonych pól wyboru z widoku do kontrolera

Poniższy kod działa idealnie za pomocą przycisku "prześlij", odsyłając wybrane identyfikatory jako tablicę identyfikatorów, ale muszę mieć to na stronie z innymi przyciskami.

// the view 
@foreach (var station in Stations) 
{ 
    <input type="checkbox" name="selected" value="@station.StationId" /> 
}  
<input type="submit" value="Save" /> 

//Controller stub 
public ActionResult Action(string [] selected) 

Utknąłem na tym przez wiele godzin, więc może patrzę na to w niewłaściwy sposób.

PS. Mój pierwszy post po wielu godzinach czytania i uczenia się tutaj.

+2

Mówisz, chcesz mieć możliwość kliknięcia łącza i przesłania zawartości na serwer? Czy mogę założyć, że te pola wyboru znajdują się w formularzu? Post Ajax? – Jack

+0

Tak, wystarczy kliknąć łącze. Nie użyłem formularza w moim widoku (jest to PartialView), ale zdaję sobie sprawę, że mogę użyć @ Html.FormBegin(), aby rozróżnić przyciski przesyłania od siebie. Nie jestem zaznajomiony z Ajaxem i JavaScriptem, dlatego (jak podejrzewam) walczę tutaj. – tr3v

Odpowiedz

2

Wygląda na to, że nie szukasz AJAX postu. Najprostszym sposobem rozwiązania tego problemu jest zawarcie go w formularzu i wywołanie funkcji przesyłania. Oto, jak powinien wyglądać Twój kod:

@using(Html.BeginForm("uraction", "urcontroller", FormMethod.Post, new { id = "formId" })) { 
    foreach(var station in Stations) { 
     <input type="checkbox" name="selected" value="@station.StationId" /> 
    } 
} 
<a href="#" id="postBtn">Post</a> 
<script> 
    $(document).ready(function() { 
     $('#postBtn').click(function() { 
      $('#formId').submit(); 
     } 
    } 
</script> 
+0

Ten (jak również post przez @ AliRıza-Adıyahşi) wygląda na to, co chcę, ale wydaje mi się, że mam konflikt z istniejącym JavaScript. Mój kod znajduje się w PartialView, który ma stronicowanie po stronie klienta, a wpisanie powyższego skryptu powoduje przerwanie stronicowania. Przeczytam najlepsze praktyki zarządzania moimi skryptami i może zacznę od prostej strony. – tr3v

+0

Yeap, zwykle z postem AJAX, chcesz uzyskać informacje zwrotne z serwera, a następnie albo zapełnić dane z powrotem do strony lub poinformować użytkownika o zmianie. Domyślam się, że szukasz przetwarzania danych, a następnie przekierowujesz użytkownika na inną stronę. W takim przypadku moje rozwiązanie będzie bardziej odpowiednie. – Jack

+0

Zgadujesz poprawnie. Mam listę obiektów (stronicowanych, ale zajmujących się tylko jedną stroną na raz na tym etapie - nie trzeba pamiętać wyborów z poprzednich stron). Chcę móc wybrać obiekty, a następnie wywołać akcję, aby przetworzyć wybrane obiekty: Usuń, Oznacz, itp. Dzięki za odpowiedź. – tr3v

3

SomeButtons lub linki do posta CheckBoxList wartości

<a href="#" id="someButton">Post</a> 
//or buttons, helpers and any elements to trigger ajax post... 

CheckBoxList:

<div id="MyDiv"> 
    @foreach (var station in Stations) 
    { 
     <input type="checkbox" name="selected" value="@station.StationId" /> 
    } 
</div> 

Skrypty:

$(document).ready(function() { 
    $('#someButton').click(function() { 
     var list = []; 
     $('#MyDiv input:checked').each(function() { 
      list.push(this.name); 
     }); 
     // now names contains all of the names of checked checkboxes 
     // do something with it for excamle post with ajax 
     $.ajax({ 
      url: '@Url.Action("Action","Contoller")', 
      type: 'POST', 
      data: { Parameters: list}, 
      success: function (result) { 
       alert("success")! 
      }, 
      error: function (result) { 
       alert("error!"); 
      } 
     }); //end ajax 
    }); 
}); 

Controll ER:

public ActionResult Action(string [] Parameters) 

czy mam rację :)

Powiązane problemy