Panelen



Forumnavigering
Senast inloggade
RSS
Sponsorer

Forum > ASP.NET 3.x > Generella frågor

MVC - ASP.NET Routing

TomH
TomH

Gradering

#16275

Hej

Jag läser lite här http://www.asp.net/learn/mvc/tutorial-02-cs.aspx om ASP.NET Routing. Har jag förstått det rätt att det är samma sak som URL Rewrite? Om det är så, innebär det att det är standard i MVC, d.v.s. är länkarna automatiskt sökmotorvänliga? Jag förstår att man får lägga till nya parametrar i Global.asax, men länkarna är så från början när man skapar ett MVC projekt?

ID: #16275 | Skapades: 2009-06-23 14:52:55 | Tråden har 11 svar och har lästs 348 gånger.

voigtan
voigtan

Gradering

#16276

Mja, Routing klarar väl av lite mer än bara en urlrewrite, men visst man kan väl säga det.

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
ID: #16276 | Skapades: 2009-06-23 15:18:39

Timmie
Timmie

Gradering

#16278

Citerar voigtan:

Mja, Routing klarar väl av lite mer än bara en urlrewrite.

Du får gärna utveckla mer där Voigtan.

ID: #16278 | Skapades: 2009-06-23 15:40:53

TomH
TomH

Gradering

#16279

Jag antog att det lite mer kraftfullt. För jag läser nu om dess uppbyggnad för att försöka förstå lite hur det fungerar och jag måste säga att jag redan är imponerad. T.ex. om man navigerar sig till /Home/Index/3 så kommer den att köra HomeController.Index(3) vilket e rätt coolt, då körs t.ex. denna kod:

using System.Web.Mvc; 

namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index(string id)
        {
            return View();
        }
    }
}

Och sen enkelheten i att skapa nya parametrar:

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

        }

Men innebär detta att om jag navigerar till /Home/GoNuts/1 så kommer HomeController.GoNuts(1) att köras?

ID: #16279 | Skapades: 2009-06-23 16:01:41

Timmie
Timmie

Gradering

#16281

Citerar TomH:
Men innebär detta att om jag navigerar till /Home/GoNuts/1 så kommer HomeController.GoNuts(1) att köras?

Ja så länge du har en ActionResult som heter GoNuts och en GoNuts.aspx.

ID: #16281 | Skapades: 2009-06-23 16:58:47

voigtan
voigtan

Gradering

#16282

Citerar Padchi:

 

Mja, Routing klarar väl av lite mer än bara en urlrewrite.

 

Du får gärna utveckla mer där Voigtan.

Den följer lite andra standarder än en urlrewrite (regExp) den har vad jag tycker en mer naturlig struktur när det gäller hur en routing skall fungera.

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
ID: #16282 | Skapades: 2009-06-23 17:35:55

Timmie
Timmie

Gradering

#16283

Citerar voigtan:

Citerar Padchi:

 

Mja, Routing klarar väl av lite mer än bara en urlrewrite.

 

Du får gärna utveckla mer där Voigtan.

Den följer lite andra standarder än en urlrewrite (regExp) den har vad jag tycker en mer naturlig struktur när det gäller hur en routing skall fungera.

Om jag inte minns fel så kan man använda RegExp med routing också, kan iof vara jag som minns fel.

ID: #16283 | Skapades: 2009-06-23 17:58:35

voigtan
voigtan

Gradering

#16284

Man kan, men man behöver inte.

Hur man ställer en fråga: http://support.microsoft.com/kb/q555375
ID: #16284 | Skapades: 2009-06-23 18:08:46

TomH
TomH

Gradering

#16290

Citerar Padchi:
Ja så länge du har en ActionResult som heter GoNuts och en GoNuts.aspx.

Men säg att man har GoNuts.aspx i en mapp, alltså: root/Mapp/GoNuts.aspx, hur skriver man då i routes.MapRoute() för att den skall hitta sidan?

ID: #16290 | Skapades: 2009-06-23 22:37:30

Timmie
Timmie

Gradering

#16292

Alla dina .aspx filer ska ligga i View mappen.
Varje controll som ligger i Controlls mappen hör till de filer som ligger i undermappen i Views mappen. Lite dåligt förklarat men ett exempel:

Du har din GoNuts.aspx fil i mappen ~/Views/Home/. Allt som ligger i Home mappen styrs utav HomeController.cs som ligger i Controllers mappen. Om du då vill ha så som du skrev tidigare med Home/GoNuts/1 så måste du lägga till en ActionResult som heter GoNuts i HomeController filen:

using System.Web.Mvc; 

namespace MvcApplication1.Controllers
{
    [HandleError]
    public class HomeController : Controller
    {
        public ActionResult Index(string id)
        {
            return View();
        }
        public ActionResult GoNuts(int id)
        {
            return View();
        }
    }
}

Eftersom att du redan har ett "routing pattern" som går ut på Controller/Action/Id så behöver du inte ändra något eller lägga till något.
Controller är alltså den kontrollen som används, i ditt fall HomeController. Action är det ActionResult som du har lagt till, i ditt fall GoNuts.

Väldigt luddigt förklarat men hoppas du förstår ändå.

ID: #16292 | Skapades: 2009-06-23 23:39:14

TomH
TomH

Gradering

#16294

Tack Padchi, jag tror att förstår lite i alla fall. Nu till nästa funderingar.

När man skickar in en parameter, t.ex. Home/Index/3 så kommer denna ActionResult att klara av att inte få något värde in i sig om man tillåter nullifiering, eller hur?

Index(int? id)

Frågan är, går det att göra samma sak med string också, d.v.s. index(string? id)? Så att den både klarar av att hantera en tom parameter och en som innehåller ett värde.

Fråga nummer två, Om jag navigerar mig till Bibblan/Bok/1, ska jag ha då en BibblanController eller hur ska jag göra för att jag ska kunna använda mig av en sån länk? För det är inte alltid man vill navigera sig genom "Home".

ID: #16294 | Skapades: 2009-06-24 08:12:42

Timmie
Timmie

Gradering

#16331

Den första frågan vet jag inte svaret på, har du testat?

För att kunna göra Bibblan/Bok/1 så skapar du en mapp i Views som heter Bibblan, en fil i den mappen som heter Bok och du skapar en BibblanController.

ID: #16331 | Skapades: 2009-06-25 21:34:00
© Copyright 2007-2009 Shadi Domat | Version 3.0 | Sidkarta | Policy