【问题标题】:Pass query string and stop RadWindow from reloading on postback传递查询字符串并阻止 RadWindow 在回发时重新加载
【发布时间】:2015-03-18 14:33:54
【问题描述】:

首先我意识到这个问题之前已经讨论过,但是似乎没有一个解决方案对我有用,我不想恢复一个古老的帖子,而是想写一个新的。

我正在使用嵌入在 RadGrid CommandItemTemplate 中的按钮从代码隐藏中启动 RadWindow。我在代码隐藏中执行此操作,以便我可以将查询字符串传递给我的新 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 窗口管理器:

<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);
        }
  } 

任何有关此问题的帮助将不胜感激!

【问题讨论】:

  • 你检查我的答案了吗?成功了吗?
  • 抱歉回复晚了,我最终使用 javascript 来启动 radwindow,这让我避免了回发。不过感谢您的帮助!

标签: c# asp.net telerik radgrid radwindow


【解决方案1】:

如果您不想在回发后显示 RadWindow,则绝对应该设置 VisibleOnPageLoad = True。

您可能需要做的是在创建 RadWindow 之后注册一个启动脚本,您可以在其中找到 radWindow 客户端对象并调用其 show() 方法:

http://demos.telerik.com/aspnet-ajax/window/examples/radwindowobject/defaultcs.aspx

您也可以查看此演示:Edit dialog for RadGrid

【讨论】:

【解决方案2】:

当重新加载已经 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;
     }
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 2011-02-22
    • 2018-01-30
    • 2012-05-14
    • 1970-01-01
    • 2019-11-18
    相关资源
    最近更新 更多