使用c#代码打开新窗口

时间:2013-06-12 19:53:23

标签: c# javascript asp.net

我正在尝试从我的代码隐藏页面打开一个新窗口,但由于一些奇怪的原因,它无法按预期工作。根据我的搜索结果,两种常用方法是:

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的想法。所以我正在做的是

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

如果链接是Web链接,我已修改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);
        }

3 个答案:

答案 0 :(得分:1)

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

<script type="text/javascript">

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

</script>

这将在文档就绪后立即打开一个窗口。请注意,这对您的用户来说特别烦人,所以我不确定您想要使用它的地点或原因。弹出窗口阻止程序也可能遇到麻烦。

答案 1 :(得分:0)

尝试使用

 Page.ResolveUrl("~/Pages/sPageRedirect.aspx")

答案 2 :(得分:0)

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

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

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

Response.Redirect(sFileName);

无论如何,是的,你会遇到弹出窗口拦截器的问题。自动弹出窗口是不可取的。