我正在使用devExpress 11.2和ASP.NET 4.0。请耐心等待冗长的问题描述。
我创建了一个包含ASPxPopupControl的用户控件(ID =" myPopup")
<dx:ASPxPopupControl ID="myPopup" runat="server" ... </dx:ASPxPopupControl>
和其他控件。我还实现了一个公共方法ShowPopup(),在其中执行myPopup.ShowOnPageLoad = true以显示此弹出窗口。然后在我的ASPX页面中注册并引用此用户控件。我将此用户控件放入ASPxRoundPanel中的表格单元格中,ID =&#34; myUC&#34;
在这个页面中,我有一个ASPxGridView,我在其中创建了一个自定义命令按钮,如下所示:
<dx:GridViewCommandColumn VisibleIndex="0" Width="30px" Caption="" ButtonType="Image">
<CustomButtons>
<dx:GridViewCommandColumnCustomButton ID="cmd">
<Image Url="~/Images/OK.png" />
</dx:GridViewCommandColumnCustomButton>
</CustomButtons>
</dx:GridViewCommandColumn>
ClientSideEvents定义为
<ClientSideEvents BeginCallback="OnDevExpressBeginCallback" EndCallback="OnDevExpressEndCallback">
单击此图像按钮时,我想弹出用户控件。请注意,此ASPxGridView还提供插入/编辑/删除功能。
有两种方法可以解决这个问题。
1为了确保ASPxGridView正确处理其内置命令(Insert等),我需要设置EnableCallBacks="True"
然后设置OnCustomButtonCallback="OnmyASPxGridView_CustomButtonCallback"
来处理代码中的图像按钮的单击事件背后。我从后面的代码调用myUC.ShowPopup()并调试到这里。但是,弹出窗口未显示。如果我设置EnableCallBacks="False"
,那么弹出窗口就会显示出我的预期。
这种方法的问题是不可接受的,因为内置命令无法正常工作。所以问题是如何在EnableCallBacks="True"
期间从代码后面的用户控件中显示弹出控件?
2第二种方法是从客户端显示弹出窗口。
我首先设置EnableCallBacks="True"
以确保我的内置命令正常工作。然后我将ClientSideEvents定义为
<ClientSideEvents BeginCallback="OnDevExpressBeginCallback" EndCallback="OnDevExpressEndCallback" CustomButtonClick="jsfnShowPopUpControl"/>
并删除了OnCustomButtonCallback事件。
我实现了javascript函数jsfnShowPopUpControl,如下所示:
function jsfnShowPopUpControl(s, e) {
// next, find access control inside user control
**var myPopupName = document.getElementById('<%=myUC.FindControl("myPopup").ClientID %>');**
if (myPopupName != null) {
myPopupName.Show();
myPopupName.PerformCallback(e);
}
else {
alert("Data error encountered"); // cannot find popup
return; //
}}
这种方法的关键部分是找到驻留在用户控件中的devexpress弹出控件。不幸的是,getElementById函数无法在我的用户控件中找到底层控件,因此也没有显示弹出窗口。
请帮助我,让我知道我在两种不同方法中做错了什么。
非常感谢。
答案 0 :(得分:0)
参考这些 - Showing a DevExpress AspxPopUpControl when user clicks a button
How to show ASPxPopupControl's window on the client side
要解决此问题,建议您使用ASPxClientPopupControl.ShowWindow方法。
对于同样的scanerio,你想要实现我所做的。 将ClientInstanceName属性分配给页面上的某个唯一名称 包括用户控件现在您可以随意在任何地方访问该对象 在html中通过javascript。
让您将弹出窗口的ClientInstanceName设置为“MainASPxClientPopupControl”。因此,应该可以在您的主页上使用它,如下所示:
MainASPxClientPopupControl.Show();
关于此主题的参考:ASPxPopupControl - Cannot get an instance of the popup from a page