在JavaScript中设置Root的路径

时间:2011-01-31 17:46:14

标签: javascript asp.net

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

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

mysite.com**/dir1/dir2**/search/results.aspx

我需要从root解析它,看起来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>

2 个答案:

答案 0 :(得分:1)

从这篇文章:Get URL of ASP.Net Page in code-behind

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

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

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

使用

bgImage5.ImageUrl = String.Format("{0}{1}",HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority),"/images/gobtn.gif");

这将为您提供绝对URL而不是根相对路径,但它应该有效。

答案 1 :(得分:1)

只需使用“/”开始路径:

rightGutter.Controls.Add
    (new LiteralControl("location.replace
        ('/search/results.aspx?lnamedpco=' + txtval+'&fname='+txtVal1);"));

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