Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc URL转发+;屏蔽会触发Url.Content()的双根目录(&;ASP.NET MVC 3 RC下的Html.Action()_Asp.net Mvc_Asp.net Mvc Routing_Url Masking - Fatal编程技术网

Asp.net mvc URL转发+;屏蔽会触发Url.Content()的双根目录(&;ASP.NET MVC 3 RC下的Html.Action()

Asp.net mvc URL转发+;屏蔽会触发Url.Content()的双根目录(&;ASP.NET MVC 3 RC下的Html.Action(),asp.net-mvc,asp.net-mvc-routing,url-masking,Asp.net Mvc,Asp.net Mvc Routing,Url Masking,(注意:试图寻找类似的问题,但最近的问题似乎仍然与我的问题不匹配。即) 我目前有两个ASP.NET MVC 3 RC应用程序在一个域下运行,即 mydomain.com/app1 mydomain.com/app2 现在,因为它是一个单独的应用程序,我注册了另一个域名并启用了到其中一个应用程序的掩码转发 (即,将加载并在浏览器中显示,但不显示) 这就是MVC开始抱怨的地方。Url.Content()和Html.Action()都会生成意外的Url。 例如,在Html.Action()的情况下,如

(注意:试图寻找类似的问题,但最近的问题似乎仍然与我的问题不匹配。即)

我目前有两个ASP.NET MVC 3 RC应用程序在一个域下运行,即

mydomain.com/app1

mydomain.com/app2

现在,因为它是一个单独的应用程序,我注册了另一个域名并启用了到其中一个应用程序的掩码转发 (即,将加载并在浏览器中显示,但不显示)

这就是MVC开始抱怨的地方。Url.Content()和Html.Action()都会生成意外的Url。 例如,在Html.Action()的情况下,如果我有
@Html.ActionLink(“About”、“Index”、“About”)
,我希望如此,但最终得到app1/About

因为转化为,显然链接不起作用

类似地,对于Url.Content,如果我有
href=“@Url.Content(“~/Content/Site.css”)”
,浏览器将无法加载样式表,因为它认为该位置位于app1/Content/Site.css,而不是

有没有一种方法可以让MVC忘记它的起始目录(即从它生成的URL中删除“app1/”)


感谢阅读,如果这里需要更多信息,请告诉我。

现在,有一些解决方法

对于Url.Content(),我们只需从
Url.Content(“~/…”)
中删除“~”,以消除该相对路径(即/app1

至于Html.ActionLink(),解决方案看起来很混乱,因为总是假定相对路径,所以这里的解决方法是临时的。有谁有更好的解决方案吗

public static MvcHtmlString ActionLinkAbsolute(
                    this HtmlHelper<dynamic> htmlHelper, string linkText, string actionName, string controllerName)
                {
                    MvcHtmlString result = LinkExtensions.ActionLink(htmlHelper, linkText, actionName, controllerName);
                    result = new MvcHtmlString(result.ToHtmlString().Replace(VirtualPathUtility.ToAbsolute("~"), String.Empty)); 
                    return result;
                }
public static MvcHtmlString ActionLinkAbsolute(
此HtmlHelper HtmlHelper、字符串链接文本、字符串操作名称、字符串控制器名称)
{
MvcHtmlString result=LinkExtensions.ActionLink(htmlHelper、linkText、actionName、controllerName);
result=new MvcHtmlString(result.ToHtmlString().Replace(virtualpath.ToAbsolute(~),String.Empty));
返回结果;
}
这里的解决办法并非没有后果。为了支持URL屏蔽,而忽略相对路径,将不会生成预期的链接,因为它将始终删除相对路径。这并不完美,但这是我可以忍受的缺点