Hallo,
Ich habe im Netz bereits danach gesucht bin aber nicht ganz schlau aus der Materie geworden,
denn ich möchte gern im view folgendes verwenden:
@(Html.ActionLink<ControllerName>(a=>a.Index(),"Login"))
Als View Engine nutze ich razor und ich dachte ab MVC 3 werden strongly typed Links nativ unterstützt, denn leider erkennt er bei mir die Syntax nicht an. Muss man hier noch ein Plugin installieren oder was übersehe ich hier genau?
Thx much
Squadwuschel
Mein Blog über .NET und MVC / EF | Meine kostenlose Onlinearbeitszeitverwaltung My:Worktime
Hallo,
ich denke dazu brauchst du die MvcContrib (Strongly Typed RedirectToAction).
Hallo squadwuschel,
zur Zeit unterstützt MVC stark typisierte Action Links noch nicht out of the box.
Da mir allerdings genau die Funktionalität fehlt, habe ich auf der entsprechenden UserVoice-Seite, die Scott Hanselman letzte Woche angelegt hat, einen Feature Request Introduce strongly-typed HtmlHelper / UrlHelper methods erstellt — es wäre schön, wenn jeder, der Interesse daran hat, 3 Stimmen dafür abgeben würde!
m0rius
Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg
Hi,
ihr müsst euch aber im Klaren sein, dass solche Links nichts für große oder Performance-orientierte Applikationen sind.
Selbst Url.Action ist 8 mal langsamer als der direkte Zugriff auf definierte Routen (Url.RouteUrl) in den RouteTables..
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hio,
Danke für die Antworten 😃
Abt -> was meinst du mit dem direkten Zugriff auf definierte Routen in den RouteTables?
thx squadwuschel
Mein Blog über .NET und MVC / EF | Meine kostenlose Onlinearbeitszeitverwaltung My:Worktime
Alles was dynamisch ist, ist langsam.
Die Verwendung von new RouteValueDictionary{{"action", "MyAction"}}
ist deutlich schneller als new { "action" = "MyAction" }
Routen in den RouteTables zu definieren und via Url.RouteUrl("RouteName") zuzugreifen ist die schnellste Möglichkeit einen Link zu generieren. Ausnahme ist hier wieder die Verwendung von new {...}
für Parameter in Zusammenhang mit der default-url.
Und wir sprechen hier halt nich von ein paar ns, sondern von einigen ms pro generierten Link, was auf einer Hauptseite jede Menge sein kann!
Die Generierung von Links über Expressions, wie Du es hier von MVC forderst, ist die aller aller langsamste - mit Abstand 😉
ASP.NET MVC Performance Slide 25 zeigt das auch sehr schön.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Sehr coole slides
Danke dir, sehr nice. Naja im Moment verwende ich enums mit toString() in meinen generierten Links um etwas Sicherheit zu haben wenn sich Linknamen ändern. Dann werde ich es mal dabei belassen 😃
Thx squadwuschel
Mein Blog über .NET und MVC / EF | Meine kostenlose Onlinearbeitszeitverwaltung My:Worktime
ENUMs in Linknamen?!
Und damit fütterst Du was? Die RouteTables?
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hio,
Nein Route tables nutze ich nicht.
Ich nehme z.B. ActionLink und nehme dort für den controllernamen einen enum Value den ich zu toString umwandle damit ich keine reinen Strings verwenden muss, ausserdem habe ich für jeden Controller ein eigenes enum. Denn ich halte es für zu fehleranfällig einfache Strings zu verwenden und vor allem wenn sich etwas ändert ist das ganze weniger fehleranfällig.
Oder wie handhabst du das?
Thx squadwuschel
Mein Blog über .NET und MVC / EF | Meine kostenlose Onlinearbeitszeitverwaltung My:Worktime
Hi,
da ich sehr auf die Performance achte habe ich nur Named Routes; sprich ich arbeite mit der RouteTable.
context.MapRoute(
"Benutzer_Uebersicht",
"Mandanten/{mandant}/Benutzer",
new { controller = "Benutzer", action = "Index" }
);
context.MapRoute(
"Benutzer_Erstellen",
"Mandanten/{mandant}/Benutzer/Erstellen",
new { controller = "Benutzer", action = "Erstellen" }
);
context.MapRoute(
"Benutzer_Bearbeiten",
"Mandanten/{mandant}/Benutzer/{benutzer}/Bearbeiten",
new { controller = "Benutzer", action = "Bearbeiten" }
);
Und dann eben mit
Url.RouteUrl( "Benutzer_Bearbeiten", new RouteValueDictionary{ { "mandant", "myCSHarp" }, { "benutzer", "Abt" } } );
arbeiten.
Damit ist dann auch die Sache mit den ASP.NET MVC UrlRouting - Schöne Urls gelöst. Ebenso ist ein einfache Lokalisierung möglich.
Schneller als das ist nur noch string.Format().
Gruß
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
danke dir für deine ausführliche Antwort, sehr nice.
thx squadwuschel
Mein Blog über .NET und MVC / EF | Meine kostenlose Onlinearbeitszeitverwaltung My:Worktime