【问题标题】:Overwrite Kendo Read Parameter Value覆盖剑道读取参数值
【发布时间】:2020-09-07 16:01:56
【问题描述】:

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

@(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 而不是新值发送。对网络活动的检查表明:

请求网址: https://localhost:8080/Dropdowns/Dropdown_Read?User=1&User=2

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

【问题讨论】:

    标签: javascript c# asp.net-mvc kendo-ui kendo-asp.net-mvc


    【解决方案1】:

    这应该比较容易解决。

    如果您更改代码:

    .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 函数来返回您要过滤的值:

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

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

    这个链接也应该可以帮助你

    DropDown List Kendo UI for ASP.Net MVC

    【讨论】:

    • 感谢您的帮助,我最终在我的 C# 控制器中使用了一个具有不同名称的“覆盖”变量,如果它被定义(默认为 null),这将是使用的值。您的解决方案可能会更好地使用。如果可行,我会尝试并将其标记为完成
    • 没问题。我经常使用这种技术。当您进行级联下拉菜单时,它会变得非常有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    相关资源
    最近更新 更多