MVC 4 | Kendo UI |下拉列表更改事件

时间:2014-05-19 07:30:52

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

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

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

使用上面的代码 1.我如何能够像'ViewBag.Test'一样访问ViewBag内容? 2.我需要遍历ViewBag中的值,并将网格中的一个textbox属性设置为该vi​​ewbag中的值。

1 个答案:

答案 0 :(得分:2)

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

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

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

  1. 在您的控制器中,创建一个字典,其中的键是dropdownlist的值和值,无论您需要什么;将此词典保存在ViewBag
  2. 在您的视图中,将字典转换为JSON字符串,并将其解析为客户端以获取具有相同键的对象
  3. onDropDownChanged事件中,只需使用选择text访问此对象即可获得所需的值。
  4. 你的问题有点模糊,因此我不能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;
            }
        }
    }