我在项目中使用Telerik RadControls,并且在菜单中有一个“关于”按钮。 当我单击“关于”按钮时,会弹出一个窗口,描述应用程序。 问题是如果我刷新页面或导航到另一页面,然后返回到第一页,窗口将自动弹出。
目标是仅在用户单击“关于”按钮时弹出该窗口。
这是我用来获取该窗口的代码:
<!--About Window-->
<telerik:RadWindowManager runat="server" EnableViewState="false" KeepInScreenBounds="true"></telerik:RadWindowManager>
<telerik:RadWindow ID="AboutMenu" Behaviors="Close" Animation="None" runat="server" Width="360px" KeepInScreenBounds="true" Height="360px" Modal="true" VisibleStatusbar="false" Skin="Glow">
<ContentTemplate>
<p style="text-align: center;">Sample Window Information</p>
</ContentTemplate>
</telerik:RadWindow>
Java脚本
function OnClientItemClick(sender, eventArgs) {
if (window.args.get_item().get_text() == "About") {
var radwindow = window.$find(window.AboutMenu.ClientID);
window.args.set_cancel(true);
}
}
.cs
protected void MainMenu_OnItemClick(object sender, RadMenuEventArgs e)
{
if (e.Item.Text == "About")
{
AboutMenu.VisibleOnPageLoad = true;
}
}
该窗口可以工作,但是每当页面加载时它就会加载,这就是我认为AboutMenu.VisibleOnPageLoad = true
行开始起作用并导致错误的原因,但是当我取出该行时,它根本不会显示。
代替使用VisibleOnPageLoad,请尝试使用以下代码在itemclick上打开窗口。
protected void MainMenu_OnItemClick(object sender, RadMenuEventArgs e)
{
if (e.Item.Text == "About")
{
string script = "function f(){$find(\"" + RadWindow1.ClientID + "\").show(); Sys.Application.remove_load(f);}Sys.Application.add_load(f);";
ScriptManager.RegisterStartupScript(Page, Page.GetType(), "key", script, true);
}
}
或者,仅使用菜单的OnCLientItemClicking事件打开RadWindow并取消回发。 但是您将需要修复JS代码,因为争论是在当前函数的上下文中进行的。 另外,除非您自己创建了ClientID数组,否则对RW的引用可能会中断。
function OnClientItemClicking(sender, eventArgs) {
if (eventArgs.get_item().get_text() == "About") {
var radwindow = window.$find(<%=AboutMenu.ClientID%>);
radwindow.show();
eventArgs.set_cancel(true);
}
}