在JavaScript中将路径设置为Root

在JavaScript中将路径设置为Root,javascript,asp.net,Javascript,Asp.net,我正在做一个从1.1到2.0的ASP.NET Web应用程序项目的快速移植。因此,模板不是母版页,而是作为自定义控件创建的。侧面板中有一个搜索框,可从网站的每个页面访问。该面板包含两个文本框,分别表示第一个和第二个名称 在将搜索参数作为查询字符串提交时,用户将被转移到mysite.com/search/results.aspx。问题在于,根据用户从路径提交搜索的位置,可能会出现以下情况: mysite.com**/dir1/dir2**/search/results.aspx 我需要从根本上解

我正在做一个从1.1到2.0的ASP.NET Web应用程序项目的快速移植。因此,模板不是母版页,而是作为自定义控件创建的。侧面板中有一个搜索框,可从网站的每个页面访问。该面板包含两个文本框,分别表示第一个和第二个名称

在将搜索参数作为查询字符串提交时,用户将被转移到mysite.com/search/results.aspx。问题在于,根据用户从路径提交搜索的位置,可能会出现以下情况:

mysite.com**/dir1/dir2**/search/results.aspx
我需要从根本上解决这个问题,看起来JS位置对象就是问题所在

这是原始代码。如何构造链接以从根解析

rightGutter.Controls.Add(new LiteralControl("<script language=javascript>"));
rightGutter.Controls.Add(new LiteralControl
    ("function doPhoneSearch(txtval,txtVal1) {"));
rightGutter.Controls.Add
    (new LiteralControl("location.replace
        ('search/results.aspx?lnamedpco=' + txtval+'&fname='+txtVal1);"));
rightGutter.Controls.Add(new LiteralControl("txtval=\"\";"));
rightGutter.Controls.Add(new LiteralControl("return false;"));
rightGutter.Controls.Add(new LiteralControl("}"));
rightGutter.Controls.Add(new LiteralControl("</script>"));


HtmlTableCell rightCell8 = new HtmlTableCell();
rightCell8.Attributes.Add("align", "right");
rightCell8.Controls.Add
    (new LiteralControl
        ("<a onClick=\"doPhoneSearch(document.getElementsByName
            ('lnamedpco')[0].value,
                document.getElementsByName('fname')[0].value)\">"));
Image bgImage5 = new Image();
bgImage5.ImageUrl = "~/images/gobtn.gif";
bgImage5.Attributes.Add("runat", "server");
rightCell8.Controls.Add(bgImage5);
rightCell8.Controls.Add(new LiteralControl("</a>"));   


<a onClick=\"doPhoneSearch(document.getElementsByName('lnamedpco')[0].value,
    document.getElementsByName('fname')[0].value)\">
        <img SRC=\"http://mysite/images/gobtn.gif\" 
             BORDER=\"0\" ALT=\"Submit Form\">
</a>
rightgoolt.Controls.Add(新的LiteralControl(“”);
RightGotter.Controls.Add(新建LiteralControl
(“函数doPhoneSearch(txtval,txtVal1){”);
RightGottle.Controls.Add
(新的LiteralControl(“location.replace
('search/results.aspx?lnamedpco='+txtval+'&fname='+txtVal1);”);
添加(新的LiteralControl(“txtval=\”\“;”));
添加(新的LiteralControl(“返回false;”);
添加(新的LiteralControl(“}”);
添加(新的LiteralControl(“”);
HtmlTableCell rightCell8=新的HtmlTableCell();
rightCell8.属性。添加(“对齐”,“右”);
rightCell8.Controls.Add
(新文字控制)
(""));
图像bgImage5=新图像();
bgImage5.ImageUrl=“~/images/gobtn.gif”;
bgImage5.Attributes.Add(“runat”、“server”);
rightCell8.Controls.Add(bgImage5);
rightCell8.Controls.Add(新的LiteralControl(“”);
来自此帖子:

您可以使用:HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority)获取主机名,即根Url,并在开头加上HTTP://

所以我要做的是替换这一行:

bgImage5.ImageUrl = "~/images/gobtn.gif";


这将为您提供一个绝对URL,而不是根相对路径,但它应该可以工作。

只需以“/”开始路径即可:


如果您使用“/”,那么它也会选择正确的协议字符串(“http”或“https”)。

谢谢,这样做了:location.replace('/mysite/search/phoneSearch.aspx?lnamedpco='+txtval+'&fname='+txtVal1);
bgImage5.ImageUrl = String.Format("{0}{1}",HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority),"/images/gobtn.gif");
rightGutter.Controls.Add
    (new LiteralControl("location.replace
        ('/search/results.aspx?lnamedpco=' + txtval+'&fname='+txtVal1);"));