Pass-Wörterbuch routeValues zu ActionLink
Alle,
Griff zu bekommen ASP.NET MVC. So weit, So gut, aber dieses ist ein wenig Nüsse.
Ich habe ein view-Modell enthält ein dictionary von Attributen für einen hyperlink, der wie folgt verwendet:
Menü = Modell variable
Html.ActionLink(Html.Encode(menu.Name), Html.Encode(menu.Action), Html.Encode(menu.Controller), menu.Attributes, null)
Das problem ist die position " - Menü.Attribute" erwartet ein Objekt der form:
new { Name = "Fred", Age=24 }
Was ich sagen kann, dieses anonyme Objekt wird tatsächlich in ein Wörterbuch per reflection sowieso, ABER Sie können sich nicht über ein Wörterbuch, um es in den ersten Platz!!!
Der generierte Html-Code für den link zeigt einfach das Wörterbuch geben.
Wie in aller Welt bekomme ich diese Runde? Der springende Punkt ist, dass seine Allgemeine und die Steuerung für das Menü festlegen.Attribute vorher....
Basiert auf einem Beitrag unten, ich habe versucht, die folgenden:
Html.ActionLink(Html.Encode(menu.Name), Html.Encode(menu.Action), Html.Encode(menu.Controller), new RouteValueDictionary(menu.Attributes), new Dictionary<string,object>())
aber dies immer noch nicht funktioniert (ich denke der code intern ruft die generische Methode, die Objekte?). Die oben (und meine ursprüngliche Lösung an einem Wörterbuch zum 4. paramater erzeugt eine HTML-ähnlich wie diese:
<a href="/EditRole?Comparer=System.Collections.Generic.GenericEqualityComparer%601%5BSystem.String%5D&Count=1&Keys=System.Collections.Generic.Dictionary%602%2BKeyCollection%5BSystem.String%2CSystem.String%5D&Values=System.Collections.Generic.Dictionary%602%2BValueCollection%5BSystem.String%2CSystem.String%5D">EditDocumentRoles</a>
D. H. es ist die Verwendung von reflektion und arbeiten die Dinge völlig falsch...
InformationsquelleAutor Graham | 2010-03-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Vorschläge, wie Sie zu beheben, war für mich in MVC3. Beispiel:
InformationsquelleAutor David Fidge
Graham,
Menü.Attribute ist ein IDictionary<string, string> und die Methode erwartet IDictionary<string, Objekt> richtig? Kopieren Sie Ihre Schlüssel und Werte in einem anderen Wörterbuch, wo die Werte sind vom Typ object.
InformationsquelleAutor Shashi Penumarthy
RouteValueDictionary
imSystem.Web.Routing
eigentlich, so ja. Diese Klasse hat einen Konstruktor, der ein Objekt oder einIDictionary<string, object>
. Es ist eine überladung, die das nimmt. So können Sie einRouteValueDictionary
statt.EDIT: ich denke, dass das problem mit diesem Teil:
Ende; es sollte null sein. Weil, was es zu tun ist, extrahieren Sie die öffentlichen Eigenschaften der Wörterbuch-und werden falsch verwendet. Lassen Sie mich wissen, wenn Sie auf null behebt das Problem.
Was ist das Menü.Attribute? Es zieht die Eigenschaften des Wörterbuchs verwendet wird, die routing-Parameter, die ist, warum Sie immer, dass Fehler.
Menü.Attribute ist selbst ein IDictionary<string, string>. Ich verstehe, dass ist es mit der spiegelung den Zugriff auf die Eigenschaften der Wörterbuch-und bekommen es falsch. Ich verstehe nicht, warum die änderung, die ich gemacht oben, dh. erstellen einer routevalue aus dem Wörterbuch, wie Sie vorgeschlagen, noch wird die Reflexion etwas falsch, als ich mich übergeben routevaluedictionary
Ich Stimme zu... und das ist gesichert mit diesem: msdn.microsoft.com/en-us/library/cc680124.aspx.
Bearbeitet die post; ich glaube, Sie müssen übergeben Sie null anstelle des letzten dictionary<string, object>, die Sie erstellen, wie eine neue...
InformationsquelleAutor Brian Mains
Ich bin mit MVC 2, und ich sehe mehr als eine Html.ActionLink-Methode, die einen IDictionary als parameter für die Html-Attribute. Gibt es irgendein Grund, warum Sie nicht verwenden können, einer von denen? Wenn Sie wirklich brauchen eine kürzere form, die Methode mit einigen Standardwerten, dann können Sie schreiben einen adapter extension-Methode auf HtmlHelper.
http://msdn.microsoft.com/en-us/library/system.web.mvc.html.linkextensions.actionlink(VS.90).aspx
Vielleicht verstehe ich nicht die Frage.
InformationsquelleAutor Shashi Penumarthy
Raum Kuh.. habe ich verloren die original-Id, die ich verwendet, um diesen post so nicht beantworten Ihre Frage direkt.
Dieser wurde mit ASP.NET MVC 1.0.
Zwar gab es eine überlastung, erschien zu nehmen, ein dictonary, der generierte HTML-Code war nicht der Inhalt des Wörterbuches ist aber der reflektierte Typ des Wörterbuchs selbst, im Grunde nicht zu tun, was ich erwarten würde. Es gab keinen Weg in das MVC-framework, dass ich bekommen konnte, es zu akzeptieren eine vordefinierte Schlüssel/Wert-Liste (z.B. in einem Wörterbuch) und für die es zum generieren des HTML-href-richtig. Ich hatte erstellen Sie ein anonymes Objekt, das war nicht möglich in meinem Szenario.
InformationsquelleAutor GrahamB