2013-03-29 35 views
5

Tài liệu hướng dẫn sử dụng Kendo UI Ajax tại Ajax Binding mô tả chuyển nhiều tham số dữ liệu sang phương thức hành động nhưng không giải quyết các mảng truyền đi như các giá trị MultiSelect.Kendo UI MVC Gửi các giá trị dữ liệu MultiSelect đến Phương thức hành động

Trong ví dụ bên dưới, nếu đa điểm được đặt thành chuỗi như "237896", trình điều khiển sẽ nhận được siteFilter = "237896". Nhưng nếu multisel được đặt thành giá trị MultiSelect như hình dưới đây, bộ điều khiển sẽ nhận được siteFilter = null.

Cách thích hợp để gửi tất cả các giá trị MultiSelect đến phương thức Hành động bằng cách sử dụng trình bao bọc MVC là gì?

.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 nên chuyển đổi dữ liệu vào một chuỗi như hình dưới đây:

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

Trả lời

3

Giải pháp của tôi không sử dụng Ajax, nhưng mô tả việc truyền tải các giá trị multiselected để điều khiển nói chung! Ajaxify nó, Model truyền tải nên làm việc tương tự!

.cshtml Dạng xem bộ lọc: biểu mẫu có các trường chọn để BẬT giá trị đã chọn cho Bộ điều khiển. Model.Products là một danh sách của Loại sản phẩm với tính IDDisplayName.

<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: Action

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

Model.cs: cụ thể mẫu sử dụng

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

dữ liệu POST nhận trong Controller Action .jpeg: Bạn đang xem danh sách đầy GUIDs của các mục nhập f rom Kendo.MultiSelect

enter image description here

+0

Florian - Cảm ơn. Vấn đề của tôi đã được giải quyết bằng cách chuyển đổi giá trị dữ liệu multiselect thành chuỗi. – Mark

+1

<3 Người này đã lưu thịt xông khói của tôi <3 – decompiled

+0

"Dữ liệu POST đã nhận trong Hành động điều khiển .jpeg:" đây có phải là hình ảnh không? Bạn có thể hiển thị cách bạn đăng dữ liệu của mình không? – JoshYates1980

1

var multisel = $ ("# sites") dữ liệu ("kendoMultiSelect") giá trị()..; không được chuyển đổi thành chuỗi.

var multisel = $ ("# sites"). Data ("kendoMultiSelect"). Value(). ToString(); Đã giải quyết vấn đề.

+0

chấp nhận và kết thúc câu hỏi, vì lợi ích của chất lượng:) –

Các vấn đề liên quan