2009-05-13 4 views
0

Auf dieser Seite:Nerd-Dinner Controller

http://nerddinnerbook.s3.amazonaws.com/Part4.htm

Nachdem der Controller hinzugefügt wird, kann ich http://localhost:xxxx/dinners durchsuchen und es funktioniert wie erwartet. Meine Frage ist, wie kann es "Abendessen" verwenden? Wo befindet sich "Abendessen"? Mein Controller heißt DinnersController, also wie wurde das Wort Abendessen sinnvoll? Ich sehe es nicht in meinem Linq zu SQL oder anderswo. Ich bin mir sicher, ich übersehe etwas Offensichtliches. Hier

ist der Code:

// 
     // HTTP-GET: /Dinners/ 

     public void Index() 
     { 
      Response.Write("<h1>Coming Soon: 

Dinners ");}

 // 
     // HTTP-GET: /Dinners/Details/2 

     public void Details(int id) 
     { 
      Response.Write("<h1>Details DinnerID: 

" + id + ""); }

Woher kommt "Dinners"?

Vielen Dank für jede Hilfe.

EDIT: Ich lese weiter in dem Artikel, bevor ich über den global.asax geschrieben und sah, aber ich verstehe nicht, wie es zu Abendessen mit diesem abgebildet:

public class MvcApplication : System.Web.HttpApplication 
    { 
     public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapRoute(
       "Default",            // Route name 
       "{controller}/{action}/{id}",       // URL with parameters 
       new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
      ); 

     } 

     protected void Application_Start() 
     { 
      RegisterRoutes(RouteTable.Routes); 
     } 
    } 

Antwort

4

ASP.NET MVC Convention favorisiert über Konfiguration. Das bedeutet, dass nach einem Controller mit einem Controller-Suffix gesucht wird und dieser nicht Teil der URL ist und nur das Präfix zu Controller enthält. Wenn Sie also HomeController haben, können Sie/Home/genauso wie DinnersController/Dinners/besuchen. Dies geschieht als Teil des ASP.NET MVC-Frameworks selbst.

Wenn Sie auf der Standardroute suchen in Global.asax Sie werden sehen, es ein Format für die URL verwendet, die wie folgt aussieht ...

"{controller}/{action}/{id}" 

Dies bedeutet, den Namen des Controllers übernehmen und den Namen der Aktion und verweisen Sie die Anfrage auf diese Methode.

Also für DinnersController Index Aktionsmethode würde es aussehen/Dinners/Index.

+0

so schneidet es nur den Controller in den Namen DinnersController und gibt mir so Abendessen? – johnny

+0

Ja, es verwendet nur das Präfix zu Controller. –

+0

Vielen Dank. Ich muss das in dem Artikel fehlen. Ich muss es neu lesen. – johnny

2

Ich habe nicht die Probe vor mir, aber ich vermute, das Routing (siehe Global.asax) ist eingerichtet, Dinners als Standard-Controller-Name zu verwenden; die spezifische Linie verantwortlich etwas wie

new { controller = "Dinners", action = "Index", id = "" } 

bearbeiten aussehen: Re-Lektüre der Frage, bedeutet dies nicht ganz beantworten; Das Problem, über das Sie verwirrt waren, ist, dass /dinners zu DinnersController aufgelöst wurde; kein Standardverhalten. Für diesen Fall ist die Antwort von Chad richtig, und wie Sie gesagt haben - das Framework zerhackt im Grunde den Controller Teil und ermittelt, welcher Name zu mappen ist.

1

Dies ist Teil der "impliziten Konfiguration" (Convention vs. Configuration), die Ihnen MVC über seine Standardrouten bietet.

Wenn Sie zu "www.mysite.com/dinners" gehen, wird MVC automatisch die "Abendessen" in der URL sehen und nach einem Controller mit dem Namen "DinnersController" suchen und die "Index" -Methode aufrufen. Wenn du zu "www.mysite.com gegangen bist.com/dinners/details ", MVC würde nach dem" DinnersController "suchen und die Methode" Details "aufrufen.

Wenn man sich Ruby on Rails anschaut, verhält es sich ähnlich (das ist fast sicher, wo Microsoft hinkam)

Verwandte Themen