传递查询字符串并阻止RadWindow在回发时重新加载

时间:2015-03-18 14:33:55

标签: c# asp.net telerik radgrid radwindow

首先我意识到这个问题之前已经讨论过了,但是没有一个解决方案似乎对我起作用,而不是复兴一篇我想创建新文章的古老文章。

我使用嵌入在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);
        }
  } 

非常感谢您对此问题的任何帮助!

2 个答案:

答案 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;
     }
 }