级联ASPxComboBox标记前面的框“无效”

时间:2012-02-01 16:23:23

标签: asp.net devexpress client-server aspxcombobox

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

我们正在混合使用JavaScript和Server Site ASP.NET。我们遇到的问题是:

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

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

2 个答案:

答案 0 :(得分:1)

您应该使用ClientEnabled属性(服务器端)和SetEnabled方法(客户端)。不要使用Enabled属性,因为您无法在客户端启用Enabled == false编辑器。
正如您所写,此解决方案也存在问题。 如果没有来源,很难确定,但您应该在不同的浏览器中使用ClientEnabled检查解决方案 如果它在IE中有效并且在Chrome和FF中不起作用,则可能存在以下问题:
ASPxComboBox lose value after a postback when the ClientEnabled property is false
ASPxTextBox ClientEnabled="false" loses value after postback
甚至这个:
ASPxTextBox value gets lost if ClientEnabled property is false

答案 1 :(得分:0)

您可以使用AspxComboBox的Client-side Events来执行此操作。

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

 <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>