0

在过去的几天里,我一直在用一些 DevExpress ASPxComboBoxes 解决一个问题。页面加载时,有 5 个框。第一个具有可选择的值,其余的应该是“非活动的”。当活动框改变值时,它应该触发下一个组合框,让它加载数据并停用前一个框。

我们混合使用 JavaScript 和服务器站点 ASP.NET。我们遇到的问题是:

  • 当我们将控件标记为客户端禁用(从服务器端)时,我们无法从服务器端从中获取数据......
  • 当我们将控件标记为已禁用(从服务器端)时,我们无法从任一端获取数据......
  • 当我们使用 Java Script 将控件标记为已禁用时,我们会遇到与从服务器端禁用客户端相同的问题...
  • 当我们将控件标记为只读时,我们不能从客户端“取消只读”它!

我们希望能够将子控件标记为非活动(只读或禁用),然后在我们向上堆栈时重新激活它们......我们还需要能够清除堆栈(目前在 JavaScript 中工作) ,但控件仍处于“活动状态”)。有任何想法吗?

4

2 回答 2

1

您应该使用ClientEnabled属性(服务器端)和SetEnabled方法(客户端)。不要使用Enabled属性,因为您无法Enabled == false在客户端启用编辑器。
正如您所写,您对此解决方案也有疑问。没有来源很难确定,但您应该ClientEnabled在不同的浏览器中检查解决方案。
如果它在 IE 中工作并且在 Chrome 和 FF 中不工作,你可能有这个问题:
当 ClientEnabled 属性为 false 时,ASPxComboBox 在回发后失去价值
ASPxTextBox ClientEnabled="false" 在回发后失去价值,
甚至这样:
ASPxTextBox 值得到如果 ClientEnabled 属性为 false,则丢失

于 2012-02-02T09:11:33.353 回答
0

您可以使用Client-side EventsAspxComboBox 来执行此操作。

对于 First Comboboxes Init EventEnabled = false为所有其他组合框设置,这使得它们被客户端禁用(在客户端)。在每个组合框的 ClientsideSelectedIndexChanged方法中,您可以根据业务逻辑的需要启用任何组合框。粗样如下:

 <dxe:ASPxComboBox ID="FirstCombobox" ...... >
      <ClientSideEvents Init="function(s, e){SecondComboBox.SetEnabled(false); ... FifthComboBox.SetEnabled(false);}" 
                        SelectedIndexChanged="function(s, e){SecondComboBox.SetEnabled(true); //or whatever your logic is}" >
    </dxe:ASPxComboBox>

    <dxe:ASPxComboBox ID="SecondComboBox" ClientInstanceName="SecondComboBox" ...... >
    </dxe:ASPxComboBox>
    ..
    ..
    ..
    <dxe:ASPxComboBox ID="FifthComboBox" ClientInstanceName="FifthComboBox" ...... >
    </dxe:ASPxComboBox>
于 2012-02-01T18:47:35.817 回答