asp.net按钮类型链接应该在新窗口中打开

时间:2012-02-22 14:59:20

标签: c# javascript asp.net

使用c#.net4.0

我知道在网格类型链接的网格视图中的asp.net按钮在点击时发布到同一页面的帖子,我需要在服务器端进行几次操作才真正将用户重定向到外部网站因此我无法使用HyperLinkField字段。我现在需要的是外部网站htm页面应该在sperate窗口中打开。我尝试了以下哪个有效但源网站的字体变大了???

继承人我试过的事情

                       Response.Write("<script>");
                       Response.Write("window.open('http://www.google.co.uk','_blank')");
                       Response.Write("</script>");
                       Response.End();

可能我需要一个刷新源站点?

由于

@ Curt这是Hyperlink我累了的代码

页面加载在gridview上添加了新按钮

HyperLinkField LinksBoundField = new HyperLinkField();          
        string[] dataNavigateUrlFields = {"link"};
        LinksBoundField.DataTextField = "link";
        LinksBoundField.DataNavigateUrlFields = dataNavigateUrlFields;
        LinksBoundField.DataNavigateUrlFormatString = "http://" + Helper.IP + "/" + Helper.SiteName + "/" + Helper.ThirdPartyAccess + "?dispage={0}&token=" + Session["Token"]; 
        LinksBoundField.HeaderText = "Link";
        LinksBoundField.Target = "_blank";           

        GridViewLinkedService.Columns.Add(LinksBoundField);
        GridViewLinkedService.RowDataBound += new GridViewRowEventHandler(grdView_RowDataBound);


to append external values (refe and appid) to navigate url


       protected void grdView_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                string strvalue = "";
                string strvalue1 = "";
                string strRef = "";
                string strAppId = "";
                foreach (GridViewRow row in GridViewLinkedService.Rows)
                {

                    if (row.RowType == DataControlRowType.DataRow)
                   {
                        //reference and appid
                        strAppId = row.Cells[0].Text;
                 strRef = row.Cells[1].Text;
            HyperLink grdviewLink = (HyperLink)row.Cells[5].Controls[0];
             strvalue = grdviewLink.NavigateUrl;
     strvalue1 = Regex.Replace(strvalue, "(.*dispage\\=).*/(services.*)", "$1$2");
         grdviewLink.NavigateUrl = "~/My Service/FillerPage.aspx?nurl=" + strvalue1 + "&AppID=" + strAppId.ToString() + "&Ref=" + strRef.ToString();


                  }
               }
            }

 public partial class FillerPage : System.Web.UI.Page
    {
       private string refno = null;
       private string appid = null;
       private string nurl = null;
       private string strvalue1 = "";
       private string newtoken = "";

        protected void Page_Load(object sender, EventArgs e)
        {
            if (Request.QueryString.GetValues("AppID") != null)
            {
                appid = Request.QueryString.GetValues("AppID")[0].ToString();
            }

            if (Request.QueryString.GetValues("Ref") != null)
            {
                refno = Request.QueryString.GetValues("Ref")[0].ToString();
            }

            if (Request.QueryString.GetValues("nurl") != null)
            {
                nurl = Request.QueryString.GetValues("nurl")[0].ToString();
            }

        while receiving the long url it gets messed up(same query multiple times and all jumbled up)?????

有更好的方法传递参数???

3 个答案:

答案 0 :(得分:3)

你需要注册脚本而不是response.write

所以你的代码是:

ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), "<script language=JavaScript>window.open('http://www.google.co.uk','_blank')</script>");

了解详情:ClientScriptManager.RegisterStartupScript

答案 1 :(得分:1)

在我需要运行服务器端代码的情况下,在打开新页面之前,我有时会创建一个Generic Handler File并使用HyperLink链接到此,并将变量作为查询字符串传递。因此,像:

/MyGenericFile.ashx?id=123

在这个文件中,我会有一些需要执行的脚本,然后是Response.Redirect()

只要HyperLink设置为target="_blank",用户就不会知道他们已经访问过通用文件,然后重定向。它会在他们打开一个新链接时出现。

因此,过程将是:

  • 用户点击指向.ashx档案
  • 的链接
  • 链接在新窗口中打开
  • 运行必要的脚本
  • Response.Redirect()正在运行
  • 用户转到网页(示例中为www.google.com

我相信广告管理系统会使用相同的流程来帮助跟踪点击次数。

答案 2 :(得分:0)

您可以使用ClientScriptManager.RegisterStartupScript注册要在页面加载时运行的脚本。