URL根字符“〜”在ASP.NET MVC中的行为不一致

时间:2015-11-26 09:37:10

标签: asp.net-mvc asp.net-core asp.net-core-mvc

我正在使用ASP.NET 5.在我的本地计算机上,我使用http://localhost但在我的服务器上部署 到http://server/MyApp

我的_Layout.cshtml

中有以下一行
<link href="~/lib/jquery-ui/base/core.css" rel="stylesheet" />

在没有“〜”的情况下渲染

 <link href="/lib/jquery-ui/base/core.css" rel="stylesheet" />

然后在我通过HTML帮助生成的另一个地方输出

@Html.MyCustomHtmlButton(model=>model.Id)

string output="<a href=\""+ "~/area1/folder2/index" +"\">";
output += ".." + "</a>";
return new HtmlString(output.ToString());

然而,这会使用“〜”

呈现为html
<a href="~/area1/folder1/index" class="btn btn-sm btn-primary">
    <i class="glyphicon glyphicon-remove-circle"></i>Cancel</a>

如果你点击它,你将被重定向到

  

http://localhost:59693/area1/controller11/edit/~/area1/controller1/index

因为在html中呈现了“〜”。

如何修复它以便将“〜”呈现给正确的根,以便http://localhosthttp://server/MyApp都有效?

2 个答案:

答案 0 :(得分:3)

这样的Tildes仅在视图中用作纯文本时才起作用。通过自己构建HtmlString,您可以绕过该URI的Razor,因此波形符的解析不会起作用。

只需使用@Url.Action()来构建URI。

答案 1 :(得分:1)

您可以使用Ur.Action()方法,如下所示

string output="<a href=\""+Url.Action("index", "controller1", new {area="area1"})+"\">";

<强>更新

如果您在类库中使用它,那么只需使用

string output="<a href=\""+"/area1/controller1/index"+"\">";