3

假设我有几个 DevExpress 控件,其中一个是按钮。在该按钮上,我想添加每个其他控件的 ClientInstanceNames,以便我可以在按钮客户端单击事件中访问它们。

C#:

String strID = "MyButton";
ASPxButton btn =  new ASPxButton() { ClientInstanceName = strID , Text = "Click Here", Width = new Unit("100%"), AutoPostBack = false, CssFilePath = strCssFilePath, CssPostfix = strCssPostFix };
btn.ClientSideEvents.Click = "btnClick";
btn.JSProperties.Add("cp_MyTxtBx", strID );

我想做类似的事情......

js:

<script type="text/javascript">
        function btnClick(s, e) {
            var theTxtBx = document.getElementById(s.cp_MyTxtBx);
            theTxtBx.SetText('some text');
        }
</script>

但这不起作用。我知道我可以这样做:

<script type="text/javascript">
        function btnClick(s, e) {
            MyTxtBx.SetText('some text');
        }
</script>

但是这些控件是动态创建的,直到运行时我才会知道它们的 ClientInstanceNames。

那么,如何根据其ClientInstanceName 的String JSProperty 来获取控件呢?

提前致谢。

相关帖子,但不是我需要的:

如何从 JavaScript 访问 ASPxTextBox 的值

DevExpress:如何获取控制客户端的实例并访问其客户端成员?

4

2 回答 2

5

如果我理解正确,这就是您所需要的:

var theTxtBx = window[s.cp_MyTxtBx];

每个设置了 ClientInstanceName 的 devex 控件都注册为全局变量。

于 2012-05-15T18:35:09.903 回答
-1

你可以破解一些东西...

基本上,当您动态创建文本框时,会给它们一个唯一的客户端实例名称。

在页面加载结束时,您可以发出一些声明和数组并将元素设置为等于文本框对象的 javascript。

var ServerSideList = new List<string>();

while(CreatingTextBoxes)
{
    ...
    ServerSideList.Add(uniqueTextboxName);
}
....


var sb = new System.Text.StringBuilder();

sb.AppendLine("var clientSideList = [];");

foreach(var s in ServerSideList)
{
        sb.Append("clientSideList.push(");
        sb.Append(s);
        sb.AppendLine(");");
}

AspLiteralObject.Text = sb.ToString();

在客户端按钮单击事件中,您可以遍历 clientSideList 数组。

<script type="text/javascript">
    function btnClick(s, e) {
        var i;
        var theTxtBx;

        for(i = 0; i < clientSideList.length; i++)
        {
            theTxtBx = clientSideList[i];
            theTxtBx.SetText('some text');
        }
    }
</script>
于 2012-05-15T17:44:16.170 回答