假设我有几个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?
答案 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>