我有以下场景:用户点击asp页面内的按钮。由于安全原因,在单击事件执行期间,系统确定在继续执行触发事件之前必须应用一些验证。
这些验证显示在窗口中(在本例中为Telerik RadWindow)。在这个RadWindow中,有一个Web用户控件(WUC)包含验证,如Captcha,安全代码,秘密问题等。在用户写入验证码文本或必要的验证(它意味着WUC内部的回发)之后,WUC应该继续从打开RadWindow的底部执行被解雇的事件。
我该怎么做?任何的想法?有可能吗?
答案 0 :(得分:1)
调用RadWindow时,请确保设置OnClientClose
事件。如果您是从代码隐藏创建RadWindow:
RadWindow newWindow = new RadWindow();
newWindow.OnClientClose = "onRadWindowClosed";
...
如果您通过javascript打开RadWindow,可以使用add_close()方法:
...
getRadWindow().add_close('onRadWindowClosed');
...
在任何一种情况下,您都需要在调用页面上为OnClientClose事件创建一个新的事件处理程序脚本:
function onRadWindowClosed(sender, eventArgs) {
var returnValue = eventArgs.get_argument();
if (returnValue != null) {
if (returnValue == "continue") {
// Continue doing work
}
else {
// Throw an error
}
}
}
在您的WUC上,btnContinue
点击事件:
protected void btnContinue_Click(object sender, EventArgs e)
{
Page.ClientScript.RegisterClientScriptBlock(GetType(), "closeScript", "getRadWindow().close('continue');", true);
}
此功能在两个页面上使用:
function getRadWindow() {
var oWindow = null;
if (window.radWindow)
oWindow = window.radWindow;
else if (window.frameElement.radWindow)
oWindow = window.frameElement.radWindow;
return oWindow;
}
更新现有答案
在你的调用页面上,添加一个函数来获取RadAjaxManager(假设你已经在页面上。如果没有,你需要一个):
function get_ajaxManager() {
return $find("<%= Telerik.Web.UI.RadAjaxManager.GetCurrent(this.Page).ClientID %>");
}
修改您的OnClosed javascript函数(来自调用页面):
function onRadWindowClosed(sender, eventArgs) {
var returnValue = eventArgs.get_argument();
if (returnValue != null) {
if (returnValue == "continue") {
// This call will invoke a server side event
get_ajaxManager().ajaxRequest("continue~");
}
}
}
在您的代码隐藏中,处理被调用的服务器端事件:
protected void RadAjaxManager1_Request(object source, Telerik.Web.UI.AjaxRequestEventArgs e)
{
try
{
if (e.Argument.Trim().Length == 0)
{
// Show a message when debugging, otherwise return
return;
}
string argument = (e.Argument);
String[] stringArray = argument.Split('~');
switch (stringArray[0])
{
case "continue":
// Continue performing your action or call a specific method
ServerSideMethodCall();
break;
}
}
catch (Exception ex)
{
RadAjaxManager.GetCurrent(this.Page).Alert("Unable to complete operation at this time: " + ex.Message);
}
}
如前所述,如果您还没有RadAjaxManager,则需要在页面上使用RadAjaxManager,并且您需要将AjaxRequest处理程序绑定到它。
<telerik:RadAjaxManager runat="server" ID="RadAjaxManager1" OnAjaxRequest="RadAjaxManager1_Request"></telerik:RadAjaxManager>
很抱歉这个冗长的回答。如果能够满足您的需求,请告诉我。