<= Tilbake

Endre standard route

Standardoppsettet til MVC5 sender oss til /Home/Index når vi ikke spesifiserer noe, men dette er konfigurerbart. I RouteConfig.cs (i mappa App_Start) har vi følgende:

public static void RegisterRoutes(RouteCollection routes)
{
	routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

	routes.MapRoute(
		name: "Default",
		url: "{controller}/{action}/{id}",
		defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
	);
}
		
Dette konfigurasjonen heter Default (hva den heter spiller egentlig ingen rolle), og den sier at det første ordet etter / skal være navnet på Controlleren og det andre skal være navnet på Action.
Til slutt kommer en valgfri id. Det betyr at hvis vi hadde valgt å kalle parameteren i Show()-metoden vår for bare id (Show(int id))kunne vi vist personen vår med http://localhost:<port>/Person/Show/1337 i tillegg til http://localhost:<port>/Person/Show?personId=1337.

Det vi er ute etter er å endre standard-controlleren til å være Person i stedet for Home. Det kan vi enkelt gjøre med å skrive "Person" i stedet for "Home" på linja med defaults:.

RouteConfig.cs ser nå slik ut:

public class RouteConfig
{
	public static void RegisterRoutes(RouteCollection routes)
	{
		routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

		routes.MapRoute(
			name: "Default",
			url: "{controller}/{action}/{id}",
			defaults: new { controller = "Person", action = "Index", id = UrlParameter.Optional }
		);
	}
}
Bygg på nytt (CTRL + F5). Verfiser at http://localhost:<port>/ leder til /Person/Index.

Fjerne linkene i hovedmenyen

Til tross for at vi nesten ikke har noe innhold i Index.cshtml har vi fremdeles menyen og diverse stilark (CSS-filer). Dette er samlet i en egen fil slik at vi skal slippe å skrive den samme koden i hvert eneste View. Denne layouten er definert i ViewStart.cshtml (i Views-mappa) som kjøres for hvert eneste View.
Den ser slik ut:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}
Her ser vi at vi setter standard-layouten for hver side til en annen .cstml-fil: "~/Views/Shared/_Layout.cshtml"; Sett Layout = null; og refresh siden.

Ikke uventent har vi nå ikke lenger noe layout. Bytt tilbake til "~/Views/Shared/_Layout.cshtml"; og gå til fila.

Dette er en nokså vanlig html-fil med litt Razor-kode innimellom, men en linje er spesielt viktig å legge merke til:

    @RenderBody()
Denne sier nemlig hvor resten av innholde skal plasseres.

Lenger opp ser vi en seksjon med linker:

	@Html.ActionLink("Application name", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
</div>
<div class="navbar-collapse collapse">
	<ul class="nav navbar-nav">
		<li>@Html.ActionLink("Home", "Index", "Home")</li>
		<li>@Html.ActionLink("About", "About", "Home")</li>
		<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
	</ul>
	@Html.Partial("_LoginPartial")
</div>
Vi fjerner linkene til sidene som ikke lenger eksisterer, og gjør om linkene til startsiden slik at de passer til vår nye Controller:
	@Html.ActionLink("MVC-intro", "Index", "Person", new { area = "" }, new { @class = "navbar-brand" })
</div>
<div class="navbar-collapse collapse">
	<ul class="nav navbar-nav">
		<li>@Html.ActionLink("Startside", "Index", "Person")</li>
	</ul>
	@Html.Partial("_LoginPartial")
</div>
Refresh siden og se at menyen har endret seg. Test gjerne de nye linkene.

<= Tilbake