如何从客户端禁用 DevExpress MVC 组合框(JS / JQuery)

Posted

技术标签:

【中文标题】如何从客户端禁用 DevExpress MVC 组合框(JS / JQuery)【英文标题】:How to disable a DevExpress MVC combobox from the client (JS / JQuery) 【发布时间】:2012-03-09 18:59:48 【问题描述】:

我正在尝试禁用基于事件的表单。我有一个 JQuery 脚本,它将禁用表/div 等的所有输入。但是 DevExpress 组合框仍然允许用户选择一个选项。控件的输入部分显示为已禁用,但选择按钮和下拉菜单仍然可用。

作为 DevExpress 客户端 API 和 Jquery 的新手,我的问题是:如何以跨浏览器兼容的方式使用 JQuery 将控件设置为禁用?

这是我目前拥有的

// jQuery 代码

// Disable all input types in the table
$('#addressTable :input').attr('disabled', true);

// Disable DevExpress MVC Combobox  **(Fails)**
$('#StateProvinceType.StateProvinceTypeId').SetEnabled(false); 

//html扩展代码

@Html.DevExpress().ComboBox(settings =>

   settings.Properties.DropDownStyle = DropDownStyle.DropDown;
   settings.Name = "StateProvinceType.StateProvinceTypeId";
   settings.Properties.ValueType = typeof(int);
).BindList(Model.States).GetHtml()

【问题讨论】:

使用 Name 属性直接访问客户端编程对象(不是 ID 选择器) 【参考方案1】:

Name / ClientInstanceName 属性用点分隔时,需要通过“ASPxClientControl.GetControlCollection( ).GetByName()" 方法(由于 javascript 细节)。不要忘记启用客户端 API:

@Html.DevExpress().ComboBox(settings => 
    settings.Name = "StateProvinceType.StateProvinceTypeId";

    settings.Properties.Items.Add("1", "1");
    settings.Properties.Items.Add("2", "2");
    settings.Properties.Items.Add("3", "3");

    settings.Properties.EnableClientSideAPI = true;
).GetHtml()

<input type="button" onclick="OnClick();" value="Toggle" />

<script type="text/javascript">
    var enabled = true;

    function OnClick() 
        var comboBox = ASPxClientControl.GetControlCollection().GetByName("StateProvinceType.StateProvinceTypeId");
        comboBox.SetEnabled(!enabled);
        enabled = !enabled;
    
</script>

否则,客户端编程对象在全局上下文中直接可用:

@Html.DevExpress().ComboBox(settings => 
    settings.Name = "comboBox";

    settings.Properties.Items.Add("1", "1");
    settings.Properties.Items.Add("2", "2");
    settings.Properties.Items.Add("3", "3");

    settings.Properties.EnableClientSideAPI = true;
).GetHtml()

<input type="button" onclick="OnClick();" value="Toggle" />

<script type="text/javascript">
    var enabled = true;

    function OnClick() 
        comboBox.SetEnabled(!enabled);
        enabled = !enabled;
    
</script>

【讨论】:

这行得通,正是我所需要的。我也很欣赏简单对象和复杂对象之间的区别,以及精心制定和书面的回复,谢谢。【参考方案2】:

当 id 有一个点时,你需要使用双反斜杠。所以你需要改变:

$('#StateProvinceType.StateProvinceTypeId')

为:

$('#StateProvinceType\\.StateProvinceTypeId')

【讨论】:

以上是关于如何从客户端禁用 DevExpress MVC 组合框(JS / JQuery)的主要内容,如果未能解决你的问题,请参考以下文章

带有 mvc 和 Angular js 的 DevExpress 报告

mvc3 - 如何从源代码中禁用符号的 htmlencode

如何安装devexpress vcl 2014.1.2

禁用/删除 Kendo mvc 验证器

基于所选行的 Devexpress MVC Gridview 自定义排序

以下方法或属性 MVC、devexpress 之间的调用不明确