2013-03-29 5 views
5

La documentazione di Ajax Binding UI di Kendo allo Ajax Binding descrive il passaggio di più parametri di dati a un metodo Action ma non indirizza gli array passanti come i valori MultiSelect.Kendo UI MVC Invia valori di dati MultiSelect al metodo Action

Nell'esempio seguente, se il multisel è impostato su una stringa come "237896", il controller riceve sitesFilter = "237896". Ma se il multisel è impostato sul valore MultiSelect come mostrato di seguito, il controller riceve sitesFilter = null.

Qual è il modo corretto di inviare tutti i valori MultiSelect al metodo Action utilizzando il wrapper 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 dovrebbero convertire i dati in una stringa come illustrato di seguito:

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

risposta

3

La mia soluzione non fa uso di Ajax, ma descrive la trasmissione dei valori multiselected al Controller in generale! Adegualo, la trasmissione del modello dovrebbe funzionare allo stesso modo!

.cshtml Visualizzazione filtro: modulo con campi di selezione per POST i valori scelti per il controller. Model.Products è una lista di tipo prodotto con proprietà ID e 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: azione

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

Model.cs: specifico modello utilizzato

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

dati POST ricevuti nella Action Controller .jpeg: You stiamo vedendo l'elenco completo di GUID delle voci selezionate f rom il Kendo.MultiSelect

enter image description here

+0

Florian - Grazie. Il mio problema è stato risolto convertendo il valore dei dati multiselect in stringa. – Mark

+1

<3 Questo ha salvato il mio bacon <3 – decompiled

+0

"Dati POST ricevuti nell'azione Controller .jpeg:" si suppone che sia un'immagine? Puoi mostrare come pubblichi i tuoi dati? – JoshYates1980

1

var multisel = $ ("#") siti di dati ("kendoMultiSelect") il valore()..; non veniva convertito in una stringa.

var multisel = $ ("# sites"). Data ("kendoMultiSelect"). Value(). ToString(); problema risolto.

+0

accetta e completa la domanda, per motivi di qualità:) –