0

我试图从我的代码隐藏页面打开一个新窗口,但由于某种奇怪的原因,它没有按预期工作。根据我的搜索,两种常见的方法是:

1.  Using Response.Redirect
2.  Page.Client.RegisterStartupScript

我有一个用于 URL 或文件名的字符串变量。为了帮助您了解我在做什么,我让某人从该站点下载了一个资源。当他们单击资源的链接(它是文件或站点链接)时,我会将他们带到一个处理页面,在那里我查看他们是否有权访问该文件并记录他们访问过的文件。完成此操作后,他们将被定向到该站点或接收下载文件。

我使用字符串作为名称。我尝试过的两种方法是:

string sPageRedirect = 
     "<script type=\"text/javascript\" >window.open(' " + sFileName + "');</script>";

Page.ClientScript.RegisterStartupScript(this.GetType(), "Openwindow", String.Format(sPageRedirect),true);

使用此方法时。我的流程页面(trackdownload)只是空白的文件信息

Response.Redirect(sPageRedirect);

使用此方法时,我收到未找到文件的错误。当我查看 URL 时,它似乎附加了它,所以我得到:

mysite/downloads/%3Cscript%20type=%22text/javascript%22%20%3Ewindow.open('%20http://mysite/myhelp/gotothis.htm');%3C/script%3E

更新

首先,谢谢 YK1、Yuck 和 Kostas ch。用于回答问题。这是我的第一篇文章,我想确保我先做功课并提供详细信息。希望也能回答问题!我一直在玩这个,我想出了一个我认为我会分享的替代解决方案。首先,正如您所指出的,对于我想做的事情,它无法像我希望的那样完成。因为当一个人单击超链接下载文件或被定向到将在新窗口中打开的新页面同时仍记录下载时,它在打开新窗口时失败。我的目标是记录所有访问的帮助链接和下载的文件。所以文件处理一如既往地工作,我对此很满意。我所做的解决方案是基于 Yuck 的想法。所以我正在做的是

如果链接是一个文件,我会像以前一样转到我的跟踪页面。

如果链接是网页链接,我已经修改了 href 以使用 JS 调用。基本上是 Yuck 的建议。在处理页面上,我仍在进行记录,但我添加了读取最后 4 个字符(即 .htm)的逻辑,如果单击的文件是该文件,则跟踪页面会将自身重定向回调用页面。这样,对于用户来说,他们仍然在主网站上,他们会得到一个包含帮助文件的新窗口。我们可以执行 window.open 的原因是他们受过训练,可以期待这些文件,所以我不应该对用户有任何问题。

所以在我的代码隐藏中我这样做

if (dsData.Tables[0].Rows[i]["filetype"].ToString().Trim() == ".html" )
                                    {
                                        sClick = " onclick=\"openNew('" + ConfigurationManager.AppSettings["Domain"].ToString() +  dsData.Tables[0].Rows[i]["fileandpath"].ToString().Trim() + "')\"";
                                   }
                                    cell.InnerHtml = "<a href=\"downloads\\tracker.aspx?File=" + dsData.Tables[0].Rows[i]["file"].ToString
+ "\"" + sClick + ">" + dsData.Tables[0].Rows[i]["name"].ToString().Trim() + "</a>";

在我的页面上有这个

function openNew(sLink) {
            window.open(sLink);
        }
4

3 回答 3

1

您不能在后面的代码中执行此操作,因为它需要影响浏览器。您可以尝试使用 jQuery 和 ASP .NET 中的一些变量:

<script type="text/javascript">

    $(function() {
        window.open('<%: sFileName :>');
    });

</script>

这将在文档准备好后立即打开一个窗口。请注意,这对您的用户来说特别烦人,因此我不确定您要在哪里或为什么要使用它。您也可能会遇到弹出窗口阻止程序的问题。

于 2013-06-12T19:57:46.300 回答
0

尝试使用

 Page.ResolveUrl("~/Pages/sPageRedirect.aspx")
于 2013-06-12T19:56:42.683 回答
0

在第一种情况下,您已明确提供脚本块并将最后一个参数传递给 true。将其更改为:

Page.ClientScript.RegisterStartupScript(this.GetType(), "Openwindow", sPageRedirect, false);

第二种情况,你不能重定向到 javascript :) 你重定向到一个地址:

Response.Redirect(sFileName);

无论如何,是的,您会遇到弹出窗口阻止程序的问题。自动弹出窗口是不可取的。

于 2013-06-12T20:21:45.067 回答