【问题标题】:MVC 4 | Kendo UI | Dropdownlist Change eventMVC 4 |剑道UI |下拉列表更改事件
【发布时间】:2014-05-19 07:30:51
【问题描述】:

我在 Kendo Grid 中放置了 KendoUI 下拉列表,我可以使用下面的代码在下拉列表中设置更改事件

function onDropDownChanged(e) {    
        var text = $("#TestMethodId").data("kendoDropDownList").value();
        alert(text);    
    }

使用上面的代码 1. 我怎样才能访问像“ViewBag.Test”这样的 ViewBag 内容? 2. 我需要遍历 ViewBag 中的值,并将网格中的 textbox 属性之一设置为该 viewbag 中的值。

【问题讨论】:

    标签: jquery asp.net-mvc kendo-ui kendo-grid kendo-asp.net-mvc


    【解决方案1】:

    简短的回答是:你不能。您正在尝试将客户端处理与服务器端处理混合使用。这根本不可能。

    onDropDownChanged 函数将在用户执行操作后执行。这意味着 Razor 引擎已经解析了 .cshtml 文件并将 HTML 代码发送到客户端。这反过来意味着任何包含ViewBag 对象的指令都已被执行。

    现在,我真的不知道您的 ViewBag 包含什么。因此,我假设您已经存储了一些strings(值)并且属性名称作为选项存储在dropdownlist 中。您可能希望根据您在dropdownlist 中选择的内容访问ViewBag 中的数据。在这种情况下,您应该执行以下操作:

    1. 在您的控制器中,创建一个字典,键是您的dropdownlist 的值和值,无论您需要什么;将此字典保存在ViewBag
    2. 在您看来,将字典转换为 JSON 字符串,并在客户端解析它以获取具有相同键的对象
    3. onDropDownChanged 事件中,只需使用选择text 访问此对象即可获得所需的值。

    您的问题有点含糊,因此我不能 100% 确定这是您需要的。底线是,您不能以这种方式混合服务器端和客户端代码。你需要依靠技巧。

    编辑: 这是一个可以帮助你的技巧。在您看来,序列化 ViewBag 并将值保存到 JavaScript 变量;将文本解析为对象;您现在可以使用 JavaScript 对其进行迭代。

    <script>
         var tmpViewBag = '@Html.Raw(Json.Encode(ViewBag.MyObject))'; //notice I'm using ' and not "
         var myOptions = [];
    
         $(document).ready(function() {
              myOptions = JSON.parse(tmpViewBag); //you now have the object array
         })
    </script>   
    

    在 select 事件中,您现在可以按如下方式使用对象数组:

    function onDropDownChanged(e) {    
        var text = $("#TestMethodId").data("kendoDropDownList").value();
        //alert(text);    
    
        for (var i = 0; i < myOptions.length; i++) {
            if (myOptions.TestName === text) { //it can as well be ".TestId"
                $("#mytextbox").value(myOptions.PassThreshold); //you can set whatever you want
                break;
            }
        }
    }
    

    【讨论】:

    • 您能否为此提出一个替代方案。因为我的 viewbag 会将数据保存在其中。在选择更改时,我只需要遍历 viewbag 内容并填充文本框值。
    • @SantoshNavle,正如我在回答中所写,您可以创建一个包含所有可能值的字典。当然,这仅在您有一个相当小的值列表时才有效。将此字典转换为 JavaScript 对象。然后可以使用下拉列表的值迭代(或直接)访问该对象。
    • 被序列化的viewbag具有以下值[{"TestId":1,"TestName":"Marker","PassThreshold":4,"FailThreshold":4},{"TestId" :2,"TestName":"ABC","PassThreshold":5,"FailThreshold":5},{"TestId":3,"TestName":"VI","PassThreshold":6,"FailThreshold":6 }]现在选择下拉值下降值说出'1'时,我需要获取TestID = 1(所选丢弃值)的传递阈值,并在网格中的文本框(例如4)上显示它。希望现在可以清楚地理解。
    • @SantoshNavle,根据您提供的值,我更新了答案。
    猜你喜欢
    • 1970-01-01
    • 2017-11-05
    • 2014-03-01
    • 2013-05-27
    • 2019-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多