2

我的页面代码如下所示:

<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 页面中打开一个新网页并传入参数是不可行的?它是否正确?

4

4 回答 4

1

下面的代码最终完全符合我的需要:

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

这段代码做了三件事:

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

这完全实现了我所需要的,而无需求助于自定义类或 javascript,尽管它确实让我不得不使用链接而不是按钮。

于 2013-07-18T16:57:07.383 回答
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);
    }
}

}

于 2013-07-16T14:46:25.727 回答
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));
}

这将重新呈现页面,然后在页面加载时添加一个脚本,该脚本将弹出窗口。一点警告,这可能会被浏览器弹出窗口阻止程序阻止。如果您想解决这个问题,您可能无需使用 Javascript 发回服务器即可实现此目的。

于 2013-07-16T14:51:06.233 回答
0

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

    function PreviewPOSTransaction(Id)
    {

        if (Id != null)
        { 

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

</script>

并在按钮“OnClientClick”事件上调用此函数,例如:

OnClientClick="PreviewPOSTransaction(1);

于 2014-08-28T07:04:44.687 回答