2009-06-03 4 views
2

Ich laufe immer wieder in Szenarien, in denen ich einen etwas intuitiveren oder "wohlgeformten" Parameternamen für Aktionsmethoden bereitstellen möchte, aber mit dem Standardverhalten erweist sich das als ziemlich schmerzhaft. Angenommen, ich habe einen Aktionsparameter wie GetWidget (int id). Wenn ich möchte, dass GetWidget (int widgetId) ist, muss ich eine neue Route hinzufügen. Es wird schlimmer, wenn Sie eine Bibliothek wie jqGrid verwenden, die für ihre Querystring-Parameter schreckliche Namen verwendet: GetWidgets (int? Nodeid, int? N_level). Stattdessen hätte ich gern GetWidgets (int? ParentId, int? Level) oder etwas ähnliches.Möglichkeiten, einen Parameter in ASP.NET MVC an einen anderen Namen zu binden?

Also, gibt es etwas einfaches, das ich übersehe? Es scheint so, als ob es sehr einfach sein sollte, MVC mitzuteilen, dass mein Parameter "parentId" an den Wert von "nodeid" in der Anfrage gebunden sein sollte. Ich habe darüber nachgedacht, einen benutzerdefinierten Aktionsfilter zu schreiben, aber es scheint so offensichtlich zu sein, dass ich nicht glauben kann, dass es nicht von Anfang an unterstützt wird.

Antwort

1

Verwendung besitzen Sie benutzerdefinierte Modell Bindemittel, das IModelBinder implementiert

3

Wenn Sie auf die URL benannte Parameter verwenden, können Sie einen bestimmten Namen für den Parameter in die Controller-Methode angeben, etwa so:

http://mydomain.com/mycontroller/getwidget?parentid=1&level=2 

... und Sie müssen die Routen auf den Parametern nicht anpassen.

+0

Das Problem ist, dass es eine dritte Teilbibliothek ist, die die Abfragezeichenfolge Parameter generiert, und es verwendet hässliche Namen (wie n_level). Ich könnte die Quelle bearbeiten, aber das möchte ich vermeiden. –

+0

Ich stimme Robert zu ... Wenn Sie keine spezielle Route definiert haben, werden die hässlichen Paramnamen als Querystring-Parameter nach dem Fragezeichen angehängt. Das einzige, was Sie opfern, ist die "hübsche" URL. Aber wie "hübsch" kann eine URL mit Namen wie "n_level" sein? – mikerennick

4

Verwenden Sie nach Rony's Antwort einen benutzerdefinierten Modellbinder. Hier ist ein Beispiel:

Verwandte Themen