2010-11-19 4 views
1

아래의 Url.Content() 및 Html.Action()에 대한 이중 루트 디렉토리를 트리거합니다 (참고 : 비슷한 질문을 시도했지만 가장 가까운 것은 일치하지 않는 것 같습니다 여전히 내 질문입니다. 즉 MVC - Application root appears twice in url using Url.Content/Url.Action)URL 전달 + 마스킹은 ASP.NET MVC 3 RC

나는 현재이 ASP.NET MVC 3 RC가 이제 하나 개의 도메인 즉

mydomain.com/app1

mydomain.com/app2

에서 실행중인 앱 , 그것은 별도의 응용 프로그램이기 때문에, 나는 다른 도메인 이름에 가입 e와 (즉, MVC 어떤 불만을 가지고 시작하는 곳이야)

음을 http://foo.comhttp://mydomain.com/app1를로드 할 브라우저에서, 그것은 단지 http://foo.com하지 http://mydomain.com/app1 표시됩니다. Both Url.Content() & Html.Action()은 예기치 않은 URL을 생성합니다. 내가 @Html.ActionLink("About", "Index", "About")이있는 경우 예를 들어, Html.Action()의 경우, 나는 http://foo.com/about을 기대하지만, http://foo.com/app1/abouthttp://mydomain.com/app1/app1/about로 변환하기 때문에 http://foo.com/APP1가/약

분명히 링크가 작동하지 않습니다 치울 . 내가 href="@Url.Content("~/Content/Site.css")"이있는 경우는 위치 http://foo.com/APP1 /Content/Site.css에있다 생각하기 때문에

마찬가지로, Url.Content를 들어, 브라우저는, 스타일 시트를로드 할 수 없게됩니다 대신 http://foo.com/Content/Site.css

방법이 있나요, 내가 읽기 (? 즉,이 생성 된 URL에서 "/ APP1"를 제거) MVC는 시작 디렉토리에 대해 잊지

감사를 할 수 있으며, 추가 정보가 여기에 필요한 경우 알려 주시기 바랍니다.

답변

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은 항상 상대 경로를 제거하기 때문에 예상 링크를 생성하지 않습니다. 그것은 완벽하지는 않지만 내가 살 수있는 단점이 있습니다.