MVC - Pass gesamte Modell als parameter an die Url.Aktion in javascript
Kann ich pass das gesamte Modell als parameter an die Url.Aktion orsimilar?
Eigentlich, ich übergeben Sie einen parameter an den controller und ich laden Sie das Modell, aber würde ich gerne weitergeben gesamte Modell.
window.location.replace('@Url.Action("Search", "Search", new { idSong = Model.IDSong })');
- Was wollen Sie erreichen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie. Ja.
Können Sie ein einfaches Modell mit nur Eigenschaften, die Werte-Typen oder
string
mit der überladung, die akzeptiertobject
als 3. parameterWürden Sie wollen? Nein.
Intern die Methode erstellt eine
Dictionary
basierend auf den Eigenschaften name und.ToString()
Wert und konvertieren, dass zu einem query-string. Nicht nur wird die resultierende url hässlich sein, wenn Sie eine Menge von Eigenschaften, oder die Werte der Eigenschaften enthält lange strings, Sie übersteigen könnte der query-string zu begrenzen und eine exception werfen. Aber das Hauptproblem ist, dass alle Eigenschaften, die komplexe Objekte oder Sammlungen Ursache Bindung zu scheitern, weil, zum Beispiel, eine Eigenschaft, die istList<string>
generiert..?somePropertyName=System.Collections.Generic.List[string]&....
Pass nur das Modell ist
ID
wie Ihr jetzt tut, und Holen Sie das Modell wieder aus dem repository im controller.@Url.Action("Search", "Search", new { id = 1, Model })
zur post zurück, ein anderer Wert, der nicht Teil des Modells, dann Nein, Sie cant (Model
wird eine verschachtelte Objekt und Methode nicht rekursiv generieren query-strings für komplexe Objekte - das Ergebnis wäre../Search? id=1&Model=someAssembly.someClassName
)new { id = 1, firstName = Model.FirstName, lastName = Model.LastName , .... }
(ich habe einmal meine eigeneHtml.RouteValuesFor()
Methode, die gebautRouteValueDictionary
basierend auf Modell und hast eine Rekursion, und hatte auch noch einen optionalen parameter für ein anonymes Objekt, dass würde das hinzufügen von zusätzlichen Werten, aber ich fand nie eine Verwendung für Sie)Können Sie versuchen, die übergabe eines ViewBag statt:
Controller: