Frage

Ich habe die folgenden zwei Routen definiert in meiner MVC-app;. - Im Moment habe ich zwei „MVC anzeigen Content-Seiten“ definiert

/ShowName/NameById
/ShowName/Index

Doch der Inhalt auf diesen beiden Seiten identisch ist? Ist es möglich, dass zwei Routen den gleichen Inhalt Seite zu teilen? Wenn nicht, dann kann ich eine einzige Regel für beide Strecken a) erstellen oder b) sollte ich eine Usercontrol zwischen beiden Content-Seiten zu teilen meine Daten zu zeigen?

    routes.MapRoute(
       "NameById",
       "Name/{theName}/{nameId}",
        new
        {
            action = "NameById",
            controller = "ShowName",
            theName = "Charley"
        }
        ,new { nameId = @"\d+" }
   );

    routes.MapRoute(
       "ShowName",
       "Name/{theName}",
        new
        {
            action = "Index",
            controller = "ShowName",
            theName = "Charley"
        }
   );

Bearbeiten Ich habe die Antworten lesen Sie unten und ich habe die folgende Aktion Ergebnis Methoden. Wenn ich entferne eines des Verfahrens (zum Beispiel des Index) dann wie würde ich meine Routen zu einem einzigen Route umschreiben?

public ActionResult Index(string theName)
public ActionResult NameById(string theName, int? nameId)

So folgenden Arbeiten url Arbeit?

/Name/Charley
/Name/Charley/11234
War es hilfreich?

Lösung

Haben Sie wirklich brauchen zwei verschiedene Routen? Sie könnten die Muster für Ihren Index Route machen

Name/{theName}/{nameId}

und macht NameID ein Nullable-Eingang zu Ihrer Aktion. Dann einfach eine gewisse Logik zu Ihrer Aktion hinzufügen, die überprüft, ob NameID einen Wert hat, und handelt entsprechend.

Andere Tipps

Sie können eine Teilansicht für den Detailbereich der Seite, halten die Trennung der beiden Aktionen im Fall, dass sie zu einem späteren Zeitpunkt ändern, erstellen. Oder Sie könnten nur

return View("DetailView", model);

Aber das kann eine zusätzliche Saite einführen zwischen den beiden Controller-Aktionen zu verwalten. Da MVC nicht unterstützt durch Aktionsnamen Überlastung (wenn Sie ein GET / POST Paar haben, ein ohne Argument), könnten Sie einfach überprüfen Sie die {NameID} Parameter und sehen, ob es vor dem Gebrauch leer / null ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top