2010-11-19 16 views
1

altında Url.Content() ve Html.Action için çift kök dizini tetikler (Not: benzer bir soru aramaya çalışmış, ancak en yakın olanı eşleşmiyor gibi görünmektedir. hala benim sorum. yani MVC - Application root appears twice in url using Url.Content/Url.Action)URL iletme + maskeleme, ASP.NET MVC 3 RC

Şu anda iki ASP.NET MVC 3 olarak RK Şimdi bir alandan yani

mydomain.com/app1

mydomain.com/app2

altında çalışan uygulamalar , ayrı bir uygulama olduğu için başka bir alan adı için kaydoldum e ve maskenin, uygulamalardan (örn. MVC bazı şikayetleri başlar orası,)

Kuyusu http://foo.comhttp://mydomain.com/app1 yük olacağını ve tarayıcıda, sadece http://foo.com değil http://mydomain.com/app1 gösterecektir. Url.Content() & Html.Action() öğesinin her ikisi de beklenmeyen URL'ler oluşturur. Ben @Html.ActionLink("About", "Index", "About") varsa Örneğin, Html.Action() durumunda, ben http://foo.com/about bekliyoruz, ancak http://foo.com/app1/abouthttp://mydomain.com/app1/app1/about çevirir Çünkü http://foo.com/app1/yaklaşık

, belli ki bağlantı çalışmaz elde sonunda . Ben href="@Url.Content("~/Content/Site.css")" varsa konumu http://foo.com/app1 /Content/Site.css altındadır düşündüğü için

Benzer şekilde, Url.Content için, tarayıcı, stil yükleme yapamaz yerine http://foo.com/Content/Site.css

Bir yolu var mı, MVC onun başlangıç ​​dizini (yani "app1/ kaldırmak" oluşturulan URL'sini kaldırmak yapabilirsiniz?)

Okumak için teşekkürler, ve burada ek bilgi gerekiyorsa lütfen bana bildirin.

cevap

0

Şu anda geçici çözümler var.

Url.Content(), biz sadece böylece göreli yol kurtulmak için, Url.Content("~/...") gelen "~" kaldıracaktır için

(yani /app1) Html.ActionLink(), çözümüne yönelik olarak

dağınık görünüyor, çünkü göreceli yol her zaman varsayıldığından, buradaki geçici çözüm geçicidir. Orada daha iyi bir çözümü olan var mı?

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

Buradaki geçici çözüm, onun sonucu olmadan olmaz. URL maskelemesini desteklemek ve göreli yolu göz ardı etmek için http://mydomain.com/app1 beklenen bağlantıyı oluşturmaz, çünkü her zaman göreceli yolu kaldırır. Mükemmel değil, ama yaşayabileceğim bir dezavantaj.