[asp.net]在一个动态创建的链接中使用波形符 (~)

发布时间: 2017/3/26 1:02:05
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我与链接和 Url 使用 JavaScript 动态创建子菜单项。然而,当我导航到链接 URL 不解析 ~ 作为根目录,但只是将字符串追加到当前的 URL。

HTML:

<!DOCTYPE html>
<html>

    <body>

        <div id="left-menu" class="sidr-hide">
            <ul>
                <li><a href="~/">Home</a></li>
                <li><a href="~/ListItem1">ListItem1</a></li>
                <li><a href="~/ListItem2">ListItem1</a>
                    <ul id="ListItemDropdown">
Following items will be created Dynamically

       @* <li><a href="~/ListItem2/?param=SubItem1">SubItem1</a></li>
        <li><a href="~/ListItem2/?param=SubItem2">SubItem2</a></li>*@
        </ul>
                </li>

            Added here for link testing: 
                <li><a href="~/ListItem2/?param=SubItem1">SubItem1</a></li>
                <li><a href="~/ListItem2/?param=SubItem2">SubItem2</a></li>
            </ul>
        </div>

        <script src="~/Scripts/Layout.js"></script>
    </body>
</html>

所有的链接都写直接在 HTML 标签上方工作好。

JavaScript:

var ExchangeLeftDropdown = document.getElementById("ListItemDropdown");

$(document).ready(function () {
var test = "Subitem1}SubItem2}"; //This string will be filled by a controller later on
var test2 = test.split("}");
for (i = 0; i < test2.length; i++) {
     //Create List Item
    var newListItem = document.createElement("li");
     //Create Link Item
    var itemLink = document.createElement("a");
    //Add text to link Item
    itemLink.textContent = test2[i];
    //Add link URL to link Item
    itemLink.setAttribute("href", "~/ListItem2/?dom=" + test2[i]);//Desired URL, 
    //but this tilde doesn't equate to home directory, so instead I get this 
    //in the URL http://localhost:1461/'DirectoryCurrentlyViewing'/~/ListItem2/?dom=SubItem2. 
    //it does lead to the right place if you navigate from the home directory


   // itemLink.setAttribute("href", "<%=ResolveUrl(~/Exchange/?dom=" + test2[i] + ")%>"); 
    // This attempt resulted in me getting a 404 error vs a Server Error in '/' Application
    //The URl is again a directly pasted string: http://localhost:1461/ListItem2/<%=ResolveUrl(~/ListItem2/?dom=SubItem2)%%>
    itemLink.setAttribute("runat", "server"); //The attempt to parse the URL server side didn't have any effect
    newListItem.appendChild(itemLink);
    ExchangeLeftDropdown.appendChild(newListItem);
}
});

有任何我可以改变/添加的链接创建或插入将允许解析站点的创建链接的文本中的属性 ~ 作为根目录下吗?

解决方法 1:

从开始的路径 ~ 颚化符字符具有特殊的意义,在一些工具。然而,这不是在 Url 中。~颚化符有没有特殊的意义,因此,您的 URL 被解释为一个正常的相对 URL。如果您在 http://example.com/a/b 和您单击一个链接到 ~c ,到头来你会在 http://example.com/a/~c 而不是 http://example.com/~c

如果你想要你的 Url 将被解释为绝对路径下您的主机名,而不是相对 Url,他们首先需要 / 相反。这就被所谓的"路径绝对 URL"。如果 ~ 应该是存在于最终的 URL,如为 Linux 用户目录中,您可能想要 /~ 。如果 ~ 是只应该是主机根的替身,只需使用 / 对其自身︰

itemLink.setAttribute("href", "/ListItem2/?dom=" + test2[i]);//Desired URL, 

如果站点的根目录未在主机的根,但在一个子目录,那里是没有标准的 URL 语法,做你想要什么。它不可能︰ 浏览器也没有办法知道该网站在您的服务器上定义的结构。

官方微信
官方QQ群
31647020