Forum > ASP.NET 3.x > Generella frågor
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?
Mja, Routing klarar väl av lite mer än bara en urlrewrite, men visst man kan väl säga det.
Mja, Routing klarar väl av lite mer än bara en urlrewrite.
Du får gärna utveckla mer där Voigtan.
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?
Ja så länge du har en ActionResult som heter GoNuts och en GoNuts.aspx.
Mja, Routing klarar väl av lite mer än bara en urlrewrite.
Du får gärna utveckla mer där Voigtan.
Mja, Routing klarar väl av lite mer än bara en urlrewrite.
Du får gärna utveckla mer där Voigtan.
Om jag inte minns fel så kan man använda RegExp med routing också, kan iof vara jag som minns fel.
Man kan, men man behöver inte.
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?
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å.
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".
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.