5

Właśnie wdrożyłem aplikację MVC4 .NET 4.0 na mój serwer internetowy, w celu przeprowadzenia testów na żywo. Trasy niearea działają poprawnie, np. Moje łącze działa poprawnie, a łącze otwiera poprawną stronę. Jednakże, wraz z linkiem do działania opartego dziedzinie jak ten:Co jest nie tak z routingiem w mojej okolicy w zainstalowanej w moim bin aplikacji MVC4?

@Html.ActionLink("Authors", "Index", "Home", new { Area = "Author", registrationType = "Author" }, null) 

link faktycznie renderowane w przeglądarce brakuje akcji i kontrolera, czyli

http://mylivedomain.com/?Area=Author&registrationType=Author 

Warto może zauważyć, że sprzedaż wiązana css funkcja MVC4 nie działała po wdrożeniu, a ja powróciłem do używania klasycznych odnośników do indywidualnych arkuszy stylów.

MOŻE DOTYCZY: Moje pytanie: Why is unmodified template code in my MVC4 app trying to register areas twice?

WŁAŚNIE NA: usuwanie domyślną akcję z odwzorowań tras obszar dla domyślnego rouite rozwiązać ten problem. Na początku nie było domyślnego kontrolera w kodzie szablonu VS2012.

+0

Czy zapomniałeś użyć 'nowego {}' na końcu swojej ActionLink()? http://stackoverflow.com/questions/2036305/how-to-specify-an-area-name-in-an-action-link –

+0

@NickDeVore, zamiast tego używam 'null', a to działa dla ja na mojej maszynie programistycznej i pracowałem wcześniej w poprzedniej, MVC3, wersji mojej witryny, którą wdrażam. – ProfK

+0

Brzmi nieźle, właśnie znalazłem to inne pytanie i odpowiedź wydawała się sugerować, że teraz jest wymagana? W każdym razie, tylko myśl. –

Odpowiedz

2

Sprawdź to.ControllerContext.RouteData.DataTokens ["area"] w metodach działania twojego obszaru.

Miałem sytuację z podobnym problemem, w którym nazwa obszaru była po prostu pustym ciągiem.

Ustawienie DataToken w metodzie akcji może zapewnić szybką naprawę, ale nie odpowiada na pytanie, dlaczego MVC nie ustawia nazwy obszaru.

2

W twoim przypadku, ponieważ określasz obszar w ciągu zapytania, powinny obowiązywać trasy z Global.asax.cs. Wierzę, że masz coś takiego istnieje:

public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Default", 
      "{controller}/{action}/{id}", 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ).DataTokens.Add("area","Author"); 
    } 

Ten kod sprawia Home/Index domyślną trasę i przechodzi Home/Index w url. Jeśli zmienisz kontroler = "Strona główna" na coś innego, na przykład controller = "Home2", wyświetlisz pełny link do Home/Index i nową domyślną trasę Home2/Index. Podobnie mają zastosowanie do domyślnych tras w obszarach, jeśli zostały one określone.

+0

Jawne dodanie tokena danych powoduje "Element z tym samym kluczem został już dodany." wyjątek. – ProfK

1

W swoim Global.asax.cs upewnij się, że ten wiersz w swoim Application_Start:

AreaRegistration.RegisterAllAreas(); 

W każdej dziedzinie, trzeba mieć AreaRegistration.cs coś takiego:

public class testAreaRegistration : AreaRegistration 
{ 
    public override string AreaName 
    { 
     get 
     { 
      return "test"; 
     } 
    } 

    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "test_default", 
      "test/{controller}/{action}/{id}", 
      new { action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 
+1

Ten kod jest automatycznie dodawany jako część szablonów projektu/przedmiotu. – ProfK

1

Z znaku @ Html.ActionLink

używać tego formatu

@Html.ActionLink("Authors", "Index", "Home", new { Area = "Author", registrationType = "Author" }, new{}) 

Rozwiązałem mój problem.

0

Czy zdarza Ci się dziedziczyć PortableAreaRegistration od MvcContrib w którymkolwiek z twoich obszarów?

Mieliśmy dokładnie te same objawy (działa lokalnie, nie na serwerze), dopóki nie usunęliśmy wszystkich przenośnych rekordów pamięci z przenośnych obszarów i powróciliśmy do używania po prostu rejestracji obszaru, ponieważ MVC4 może zarejestrować przenośny obszar bez żadnych dodatkowych bibliotek.

+0

W ogóle nie używam MvcContrib. – ProfK

Powiązane problemy