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

时间:2013-07-16 14:39:33

标签: c# asp.net

我的网页代码如下所示:

<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是不可行的?这是对的吗?

4 个答案:

答案 0 :(得分:1)

以下代码最终完全符合我的要求:

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

这段代码做了三件事:

  • 1)在新页面中打开搜索。
  • 2)将搜索值截断四 字符(我只需要搜索字符串的一部分)
  • 3)通过 参数到新页面。

这完全符合我的需要而不需要使用自定义类或javascript,虽然它确实让我不得不使用链接而不是按钮。

答案 1 :(得分:0)

使用此课程。

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

}

答案 2 :(得分:0)

我认为你在正确的轨道上,但你会混淆服务器端代码和客户端代码。 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回发到服务器。

答案 3 :(得分:0)

更好的选择是创建一个javascript函数,如:

    function PreviewPOSTransaction(Id)
    {

        if (Id != null)
        { 

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

</script>

并在按钮上调用此功能&#34; OnClientClick&#34;事件如:

的OnClientClick =&#34; PreviewPOSTransaction(1);