2013-03-29 17 views
5

Dokumentacja wiązania Ajax w Kendo U Ajax Binding opisuje przekazywanie wielu parametrów danych do metody Akcji, ale nie odnosi się do przechodzących tablic takich jak wartości MultiSelect.Kendo UI MVC Wyślij wartości danych MultiSelect do metody Akcji

W poniższym przykładzie, jeśli multisel jest ustawiony na łańcuch, taki jak "237896", kontroler otrzymuje sitesFilter = "237896". Ale jeśli multisel jest ustawiony na wartość MultiSelect, jak pokazano poniżej, kontroler otrzymuje parametr sitesFilter = null.

Jaki jest właściwy sposób wysyłania wszystkich wartości MultiSelect do metody Action za pomocą opakowania MVC?

.DataSource(dataSource => dataSource 
           .Ajax() 
           .ServerOperation(false) 
           .Read(read => read.Action("Documents_Read", "Document") 
               .Type(HttpVerbs.Post) 
               .Data("getCriteria")) 

    function getCriteria() { 
    var multisel = $("#sites").data("kendoMultiSelect").value(); 
    return { 
     sitesFilter: multisel 
    }; 
} 

    public ActionResult Documents_Read([DataSourceRequest] DataSourceRequest request, string sitesFilter=null) 
    { 
     return Json(GetDocuments(sitesFilter).ToDataSourceResult(request), JsonRequestBehavior.DenyGet); 
    } 

EDIT: getCriteria należy przekonwertować dane na ciąg, jak pokazano poniżej:

function getCriteria() { 
     var multisel = $("#sites").data("kendoMultiSelect").value().toString(); 
     return { 
      sitesFilter: multisel 
     }; 

Odpowiedz

3

Moje rozwiązanie nie używa Ajax, ale opisuje transmisję wartości multiselected do kontrolera w ogóle! Ajaxify to, transmisja modelu powinna działać podobnie!

.cshtml Widok filtra: Formularz z polami wyboru do POST wybranych wartości do kontrolera. Model.Products jest Lista Typu Produkt o właściwościach ID i displayname.

<div class="editor-field"> 
    @{ 
     IEnumerable<Product> productSelectList = Model.Products; 
     Html.Kendo().MultiSelectFor(model => model.ProductIds) 
      .BindTo(new SelectList(productSelectList, "ID", "DisplayName")) 
      .HtmlAttributes(new { style = "width: 400px;" }) 
      .Render();  
    } 
</div> 

Controller.cs: akcji

[HttpPost] 
public ActionResult SearchForLicenseTerm(SearchLicenseTermFilterViewModel searchLicenseTermFilterViewModel) 
{ 
    // Search logic 
} 

Model.cs: specyficzny model stosowany

public class SearchLicenseTermFilterViewModel 
{ 
    public SearchLicenseTermFilterViewModel() 
    { 
     ProductIds = new List<Guid?>(); 
    }   
    public List<Guid?> ProductIds { get; set; } 
} 

odebranych danych POST w kontrolerze Action .jpeg: Wy widzę wypełnioną listę identyfikatorów GUID wybranych pozycji f rom Kendo.MultiSelect

enter image description here

+0

Florian - Dzięki. Mój problem został rozwiązany przez konwersję wielosektorowej wartości danych na ciąg znaków. – Mark

+1

<3 Ten uratował mi boczek <3 – decompiled

+0

"Otrzymane dane POST w akcji sterownika .jpeg:" czy to ma być obraz? Czy możesz wyświetlić sposób publikowania swoich danych? – JoshYates1980

1

var multisel = $ ("#") strony danych ("kendoMultiSelect") wartość()..; nie był konwertowany na ciąg znaków.

var multisel = $ ("# sites") .danych ("kendoMultiSelect"). Value(). ToString(); Rozwiązać problem.

+0

zaakceptuj i zakończ pytanie, w trosce o jakość:) –