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

时间:2012-05-15 17:19:47

标签: javascript asp.net devexpress

假设我有几个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获取控件?

提前致谢。

相关帖子但不完全符合我的要求:

How to access the value of an ASPxTextBox from JavaScript

DevExpress: How do get an instance of a control client-side and access its client-side members?

2 个答案:

答案 0 :(得分:5)

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

var theTxtBx = window[s.cp_MyTxtBx];

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

答案 1 :(得分:-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>