2010-02-26 24 views
14

ASP.NET MVC2 RC2 üzerine kurulu büyük bir uygulama var.Her ActionLink'e alan = "" alanı eklemeden varsayılan alan nasıl belirtilir?

benim tüm bağlantılar şuna benzer: htp: // site/kontrolör/aksiyon/id

Ben sadece adında bir Alanını ekledi: BigBird. HTP: Ben BigBird alanda olduğumda

Şimdi benim tüm bağlantıları şuna benzer // site/BigBird/kontrolör/aksiyon/id

Sorun o kontrolörleri/eylemlerin hiçbiri yeni bölgemde var. Bu yüzden tüm eylemlerimin tümünü uygulamamdan geçirmeliyim ve bu routevalue koymam gerekiyor: alan = string.empty

Bu konuda herhangi bir yol var mı?

cevap

12

belki kendi aramalarını geçersiz kılma dışındaki standart MVC yöntemler kullanıyorsunuz (eğer ondan etrafında bilmiyorum: o sahip alanların bütün amacı) yendi olarak, tavsiye etmiyoruz sürüm), ancak ActionLink<TController> veya MvcFutures lib verilen diğer genel yöntemleri kullanıyorsanız yapabilirsiniz.

MvcFutures yöntemleri, alanı belirlemek için denetleyicide bir ActionLinkAreaAttribute arar, ExpressionHelper.GetRouteValuesFromExpression()'u arar. aşağıdaki gibi Yani ana "alanında" Denetleyicilerinizi dekore edebilirsiniz:

[ActionLinkArea("")] 
[HandleError] 
public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

eylem bağlantıları düzgün standart sözdizimi kullanılarak oluşturulmalıdır:

<%= Html.ActionLink<HomeController>(c => c.Index(), "Home") %> 
+0

Cevabınız için teşekkürler. Yaptığım şey tam olarak bu oldu ama onu geri göndermek için dönmedim. – iamwill

+0

Haha Burada aptal bir Html.AreaActionLink ekliyordum ... sonra RouteValueDictionary GetRouteValuesFromExpression'u gördüm ve bu ActionLinkAreaAttribute'nin ne olduğunu merak ettim! Google bunu ve buraya iyi bir iş çıkardı: P – superlogical

+0

Merhaba, ama biz bu Alanı Öznitelik - [ActionLinkArea ("")] kullandığımızda ve Html.BuildUrlFromExpression (x => Index()) kullanmaya çalıştığımızda hala htp alıyoruz: // site/URL'de BigBird/controller/action/id alanı ... –

0

İki şeyden birini yapabilirsiniz. Denetleyicileri/eylemlerinizi uygun alana taşıyabilir/kopyalayabilir veya yeni alan için yeni denetleyiciler yazabilirsiniz (bu benim önerdiğim yaklaşımdır) ya da yeni alanı köke zorlayan özel bir yol yazabilirsiniz (I

routes.MapRoute(
    "BigBird_Override",            
    "BigBird/{controller}/{action}/{id}",       
    new { area = String.Empty } 
); 
+1

Benim açıklamam çok açık değildi. BigBird denetleyicileri/modelleri/görünümlerimi BigBird alanına ekledim. Ancak hem Alanı hem de ana siteyi kapsayan ana sayfa, BigBird'i ana siteye geri giden tüm bağlantılarda gösterir. Yapmam gerektiği gibi göründüğüm şey, tüm ActionLink çağrılarıma {Area = ""} eklemektir. MVC kaynağından anlatabildiğim kadarıyla, bulunduğunuz bölgeye göre Bölge'yi tanımasıdır. Bir denetleyicinin Alanda bulunmadığını ve bunun için BigBird'in hatalı olan Linklere BigBird eklediğini belirtir. BigBird bölgesinde t ... hiç bir bölgede değiller. – iamwill