簡體   English   中英

使用Window.Open而不是Response.Redirect打開新窗口?

[英]Using Window.Open instead of Response.Redirect to open new window?

我的頁面代碼如下所示:

<asp:Button ID="btnSearch" runat="server" Text="Search" onclick="btnSearch_Click"/>

我的方法如下所示:

protected void btnSearch_Click(object sender, EventArgs e)
    {
        var value = lblGraphicNameValue.Text.ToString();
        Response.Redirect("Search.aspx?txtGraphicName=" +
                           value);
    }

當前,當用戶按下“搜索”按鈕時,頁面將刷新並加載Search.aspx頁面。 我想發生的是改為在新窗口中打開Search.aspx。 我已經看過使用Window.Open,但是我不確定這是否是正確的路由,或者我是否可以使用相同的方法來傳遞變量(查詢字符串)。 有人可以指出我正確的方向嗎? 我所擁有的作品,我只希望它在一個新頁面中打開,而無需保留上一頁。

編輯:我應該提到我不能使用javascript(安全環境,每個瀏覽器都禁用了javascript)。

從我正在閱讀的內容來看,這似乎表明如果沒有javascript,從asp.net頁內打開新網頁並傳遞parms是不可行的? 這個對嗎?

下面的代碼最終完全滿足了我的需要:

<a href="<%= this.ResolveUrl("Search.aspx?id=" + lblGraphicNameValue.Text.Remove(lblGraphicNameValue.Text.Length -4)) %>"
                                                                                target="_blank">Search Related</a>

此代碼執行三件事:

  • 1)在新頁面中打開搜索。
  • 2)用四個字符截斷搜索值(我只需要搜索字符串的一部分)
  • 3)將參數傳遞到新頁面。

這確實實現了我所需的功能,而無需借助自定義類或javascript,盡管這確實使我不得不使用鏈接而不是按鈕。

使用此類。

ResponseHelper .Redirect("popup.aspx", "_blank", "menubar=0,width=100,height=100");



public static class ResponseHelper {
public static void Redirect(string url, string target, string windowFeatures) {
    HttpContext context = HttpContext.Current;

    if ((String.IsNullOrEmpty(target) ||
        target.Equals("_self", StringComparison.OrdinalIgnoreCase)) &&
        String.IsNullOrEmpty(windowFeatures)) {

        context.Response.Redirect(url);
    }
    else {
        Page page = (Page)context.Handler;
        if (page == null) {
            throw new InvalidOperationException(
                "Cannot redirect to new window outside Page context.");
        }
        url = page.ResolveClientUrl(url);

        string script;
        if (!String.IsNullOrEmpty(windowFeatures)) {
            script = @"window.open(""{0}"", ""{1}"", ""{2}"");";
        }
        else {
            script = @"window.open(""{0}"", ""{1}"");";
        }

        script = String.Format(script, url, target, windowFeatures);
        ScriptManager.RegisterStartupScript(page,
            typeof(Page),
            "Redirect",
            script,
            true);
    }
}

}

我認為您的工作方向正確,但您卻混淆了服務器端代碼和客戶端代碼。 window.open是可在客戶端使用的Javascript函數。 因此,您需要從C#渲染一些Javascript以使窗口彈出。 嘗試:

protected void btnSearch_Click(object sender, EventArgs e)
{
    var value = lblGraphicNameValue.Text.ToString();
    ClientScript.RegisterStartupScript(this.GetType(), "newWindow", String.Format("<script>window.open('Search.aspx?txtGraphicName={0}');</script>", value));
}

這將重新呈現頁面,然后在pageload上添加一個腳本,該腳本將彈出窗口。 有點警告,這可能會被瀏覽器彈出窗口阻止程序阻止。 如果您想解決此問題,則可能無需使用Javascript將其發回到服務器即可實現。

更好的選擇是創建一個JavaScript函數,例如:

    function PreviewPOSTransaction(Id)
    {

        if (Id != null)
        { 

            window.open('POSTransReport.aspx?TransID=' + Id);
            return true;
        }
    }

</script>

並在按鈕“ OnClientClick”事件上調用此函數,例如:

的OnClientClick =“PreviewPOSTransaction(1);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM