覆盖Kendo读取参数值

Overwrite Kendo Read Parameter Value

我有一个 Kendo 下拉列表,它向它的读取请求发送一个附加参数。例如

@(Html.Kendo().DropDownList()
    .Name("MyDropdown")
    .HtmlAttributes(new { style = "width:100%" })
    .Filter("contains")
    .Value(ID)
    .DataSource(source =>
    {
        source.Read(read =>
        {
            read.Action("Dropdown_Read", "Dropdowns", new { User = 1});
        });
    })
)

这工作正常,正如预期的那样,值 1 被传递到控制器并执行读取。

根据用户与其他元素的交互,可以再次触发此读取,我已通过 Javascript:

完成此操作
var user = $(#UserList).val(); // 2 for example
$('#MyDropdown').data('kendoDropDownList').dataSource.read({ User: user});

这会触发读取功能,但用户值仍作为 1 而不是新值发送。对网络 activity 的检查表明:

Request URL: https://localhost:8080/Dropdowns/Dropdown_Read?User=1&User=2

似乎用户 属性 被定义了两次,发送到控制器,然后控制器获取第一个值,即原始默认值。有没有办法覆盖这个值并将新值发送到控制器?

这应该比较容易修复。

如果您更改代码:

.DataSource(source =>
    {
        source.Read(read =>
        {
            read.Action("Dropdown_Read", "Dropdowns", new { User = 1});
        });
    })

.DataSource(source =>
    {
        source.Read(read =>
        {
            read.Action("Dropdown_Read", "Dropdowns").Data("getFilterValue");
        });
    })

然后创建一个 Javascript 函数,returns 您要过滤的值:

function getFilterValue(){
     var user = $('#UserList').val();
    .... other code removed for brevity
    return {User: user}; 
}

这应该会为您提供所需的参数结构,并从您的其他控件发送选定的值。您可能希望放入一些检查代码以确保已选择一个值,如果没有,则在允许的情况下发送默认值。

这个link应该也能帮到你

DropDown List Kendo UI for ASP.Net MVC