如何通过客户端上的 JSProperties 访问 DevExpress ASPx 控件

How to access a DevExpress ASPx control via JSProperties on the client

本文关键字:访问 DevExpress ASPx 控件 JSProperties 何通过 客户端      更新时间:2023-09-26

假设我有几个 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 的字符串 JSProperty 获取控件呢?

提前谢谢。

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

如何从 JavaScript 访问 ASPxTextBox 的值

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

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

var theTxtBx = window[s.cp_MyTxtBx];

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

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

基本上,当您动态创建文本框时,请为其提供唯一的客户端实例名称。

在页面加载结束时,您可以发出一些 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>