首先我意识到这个问题之前已经讨论过了,但是没有一个解决方案似乎对我起作用,而不是复兴一篇我想创建新文章的古老文章。
我使用嵌入在RadGrid CommandItemTemplate中的按钮从代码隐藏中启动RadWindow。我在codebehind中执行此操作,以便我可以将查询字符串传递给我的新radwindow以进行进一步处理。我的问题是我可以关闭radwindow并刷新页面并重新打开之前关闭的radwindow。我有一个RadWindowManager设置与EnableViewState = false,如前所述,但这不解决我的问题。我还读到将RadWindow的VisibleOnPageLoad属性设置为false将阻止它在回发时重新加载,但是这也会阻止它在我的代码中加载。我的代码如下。
命令项模板:
<CommandItemTemplate>
<asp:Button ID="ButtonONE" Text="Add New" runat="server" CommandName="AddNew"></asp:Button>
</CommandItemTemplate>
Rad Window Manager:
<telerik:RadWindowManager ID="RadWindowManagerOne" runat="server" EnableViewState="false">
<Windows>
</Windows>
</telerik:RadWindowManager>
代码背后:
protected void grdOne_ItemCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e) {
if (e.CommandName == "AddNew") {
RadWindow newWindow = new RadWindow();
newWindow.NavigateUrl = "AddEdit.aspx";
newWindow.Skin = "Web20";
newWindow.Title = "Add/Edit";
newWindow.Modal = true;
newWindow.VisibleOnPageLoad = true;
newWindow.DestroyOnClose = true;
//newWindow.Behaviors = Close, Move;
newWindow.EnableViewState = false;
newWindow.AutoSize = true;
newWindow.VisibleStatusbar = false;
newWindow.DestroyOnClose = true;
RadWindowManagerOne.Windows.Add(newWindow);
}
}
非常感谢您对此问题的任何帮助!
答案 0 :(得分:1)
如果你不希望在回发后显示RadWindow,你肯定应该不设置VisibleOnPageLoad = True。
您可能需要做的是创建RadWindow然后注册启动脚本,在其中找到radWindow客户端对象并调用其show()方法:
http://demos.telerik.com/aspnet-ajax/window/examples/radwindowobject/defaultcs.aspx
您也可以查看此演示:Edit dialog for RadGrid
答案 1 :(得分:0)
当重新加载已经过POST的页面时,浏览器会要求您重新发送信息,如果确认/继续,则会再次启动最后一个回发,因此再次调用打开radWindow的方法。您可以通过在其中放置断点来确认这一点。 可以避免这种行为。
在页面中添加隐藏字段:
<asp:HiddenField runat="server" ID="_repostcheckcode" />
在代码后面添加以下代码:
protected void Page_Load(object sender, EventArgs e)
{
CancelUnexpectedRePost();
}
private void CancelUnexpectedRePost()
{
string clientCode = _repostcheckcode.Value;
//Get Server Code from session (Or Empty if null)
string serverCode = Session["_repostcheckcode"] as string ?? "";
if (!IsPostBack || clientCode.Equals(serverCode))
{
//Codes are equals - The action was initiated by the user
//Save new code (Can use simple counter instead Guid)
string code = Guid.NewGuid().ToString();
_repostcheckcode.Value = code;
Session["_repostcheckcode"] = code;
}
else
{
//Unexpected action - caused by F5 (Refresh) button
Response.Redirect(Request.Url.AbsoluteUri);
}
}
Here您找到了有关如何解决上述问题的原始文章。 关于如何打开radWindow的另一个参考资料可以从我之前的答案here中获取。
关于如何将参数传递给窗口,我将使用一种标准方法,只需从您打开的窗口的Page_Load中调用一个类,它将提供您需要的参数。
public class Class1
{
public static string MyMethod()
{
string myString;
//your logic
return myString;
}
}