我有一个称为PendingControl的ASP.Net控件。在PendingControl上有一个DataGrid。此DataGrid具有
OnItemCommand="dgPending_ItemCommand"
及其模板列之一具有一个ImageButton:
<asp:TemplateColumn>
<ItemTemplate>
<asp:ImageButton runat="server" ImageUrl="~/images/btn-reject.png" CommandName="RejectOrder" ID="btnReject" />
</ItemTemplate>
</asp:TemplateColumn>
图像按钮调用一个JavaScript函数ConfirmRejection,该函数附加在PageLoad上:
ImageButton btnreject = new ImageButton();
foreach (DataGridItem item in dgPending.Items)
{
btnreject = (ImageButton)item.FindControl("btnReject");
btnreject.Attributes.Add("onclick", "ConfirmRejection('height=200,width=625, left=650,top=200','');return false");
}
function ConfirmRejection(width, height, scrollbars) {
var paramz = "width=" + width + ", height=" + height + ", scrollbars=" + scrollbars + ", resizable, status";
var nUrl = 'ConfirmRejection.aspx';
return window.open(nUrl, "AffNew", paramz);
}
此函数打开的窗口使用window.opener在PendingControl上调用另一个javascript函数:
window.opener.ProcessFromPopup(tbReason.value);
这是PendingControl的第二个功能:
function ProcessFromPopup(reason) {
var hid = document.getElementById('<%=hfReason.ClientID%>');
hid.value = reason;
}
我的问题是ProcessFromPopup运行后,未调用dgPending_ItemCommand。我尝试添加
__doPostBack('btnReject.ClientID');
到ProcessFromPopup,但不起作用。我不能使用WebMethod和ScriptManager,因为dgPending_ItemCommand不能是静态方法(它使用Session并调用各种非静态方法)。
我该怎么做?我需要Ajax吗?还是有其他解决方法?