1

(注意:试图寻找类似的问题,但最接近的问题似乎仍然与我的问题不匹配。即MVC - 应用程序根使用 Url.Content/Url.Action 在 url 中出现两次

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

mydomain.com/app1

mydomain.com/app2

现在,因为它是一个单独的应用程序,我注册了另一个域名并启用掩码转发到其中一个应用程序(即http://foo.com将加载http://mydomain.com/app1并在浏览器中,它只会显示http://foo.com,而不是http://mydomain.com/app1

嗯,这就是 MVC 开始抱怨的地方。Url.Content() 和 Html.Action() 都会生成意外的 URL。例如,在 Html.Action() 的情况下,如果我有@Html.ActionLink("About", "Index", "About"),我期望http://foo.com/about,但最终得到http://foo.com/ app1 /about

因为http://foo.com/app1/about翻译成http://mydomain.com/app1/app1/about,显然链接不起作用。

同样,对于Url.Content,如果我有href="@Url.Content("~/Content/Site.css")",浏览器将无法加载样式表,因为它认为该位置位于http://foo.com/app1/Content/Site.css,而不是http://foo .com/Content/Site.css

有没有办法,我可以让 MVC 忘记它的起始目录(即从其生成的 URL中删除“ app1/ ”?)

感谢您的阅读,如果此处需要更多信息,请告诉我。

4

1 回答 1

0

现在,有一些解决方法。

对于 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;
                }

这里的解决方法并非没有后果。为了支持 URL 屏蔽,并且忽略相对路径,http ://mydomain.com/app1不会生成预期的链接,因为它总是会删除相对路径。它并不完美,但这是我可以忍受的缺点。

于 2010-11-19T16:51:38.197 回答