Wie kann ich in der Ansicht, die von einer URL wie / Controller / Action / 1 zurückgegeben wird (unter der Annahme der Standardroute von controller / action / id), über die Ansicht auf die ID zugreifen?
Ich möchte es nicht auf Aktionsebene zum ViewData-Wörterbuch hinzufügen müssen, wenn die Anforderung bearbeitet wird.
asp.net-mvc
JMS
quelle
quelle
Antworten:
Ich denke, das ist, wonach Sie suchen:
<%=Url.RequestContext.RouteData.Values["id"]%>
quelle
ViewData ist genau der richtige Weg, dies zu tun.
Sie können auch ein Modell mit einer ID an die Ansicht übergeben.
Bearbeiten: Ohne genau zu wissen, was Sie tun möchten, ist es schwierig, spezifischere Ratschläge zu geben. Warum benötigen Sie eine ID, aber keine anderen Modelldaten? Sendet Ihr Controller wirklich nur das ID-Feld an die Ansicht? Es ist schwer vorstellbar, wie das Szenario aussieht.
Wenn der ID-Wert wirklich die einzige Modellinformation ist, die an Ihre Ansicht übergeben wird, können Sie die ID selbst als Modell verwenden. Dann wäre der Rückgabewert Ihrer Aktionsmethode
View(id)
und Sie müssten ViewData nicht verwenden.quelle
ViewData["id"] = id;
passt einfach nicht zu mir. Ich denke, es ist die Tatsache, dass ich dieses Muster einige Male benutze. Ein- oder zweimal und es würde mir wahrscheinlich nichts ausmachen. Vielen Dank.Das Hinzufügen zu den Ansichtsdaten ist das Richtige. Zum Hinzufügen können Sie jederzeit eine benutzerdefinierte
ActionFilter
Datei hinzufügen, die es aus dem Routenwörterbuch abruft und in die Ansichtsdaten überträgt.quelle
Wir können
id
alsRoute Data
oder übergebenQueryString
, um beide zu unterstützen, empfehle ich Folgendes:var routeValues=Url.RequestContext.RouteData.Values; var paramName = "id"; var id = routeValues.ContainsKey(paramName)? routeValues[paramName]: Request.QueryString[paramName];
quelle
Ich denke, Sie können direkt in der URL-Aktion Url.RequestContext.RouteData.Values ["id"] verwenden.
quelle
Einfache Antwort in Razor:
@Url.RequestContext.RouteData.Values["id"]
In ASP.NET Core
@Url.ActionContext.RouteData.Values["id"]
quelle
Nur meine zwei Cent, aber ich verwende immer Ansichtsmodelle, um Daten an meine Ansichten zu übergeben. Auch wenn es so einfach ist, wie einen Ausweis zu benötigen
int
.Wenn Sie dies tun, ist der Zugriff auf diesen Wert trivial, da MVC die gesamte Arbeit für Sie erledigt.
Für das, was wert Ich es in der Regel nennt meine Ansicht Modelle als solche:
{Controller}{ViewName}ViewModel
Dies hilft, die Dinge im Maßstab zu organisieren.
Ein Beispiel:
// ~/ViewModels/HomeEditViewModel.cs public class HomeEditViewModel { public int Id { get; set; } } // ~/Controllers/HomeController.cs public IActionResult Edit(int id) { return View(new HomeEditViewModel() { Id = id }); } // ~/Views/Home/Edit.cshtml @model HomeEditViewModel <h1>Id: @Model.Id</h1>
quelle
Wenn Sie .NET Core verwenden
Verwenden Sie diesen Code
Url.ActionContext.RouteData.Values["id"]
quelle