2010-09-01 3 views
5

ich eine Controller-Aktion, die wie folgt aussieht:ein benutzerdefiniertes Modell Bindemittel für ein Argument einer Controller-Aktion Mit

public ActionResult DoSomethingCool(int[] someIdNumbers) 
{ 
    ... 
} 

Ich möchte in der Lage sein zu verwenden, um ein benutzerdefiniertes Modell Binder das Erstellen das Array von IDs aus eine Liste von Kontrollkästchen auf dem Client. Gibt es eine Möglichkeit, an genau dieses Argument zu binden? Gibt es außerdem eine Möglichkeit für einen Modellbinder, den Namen des verwendeten Arguments zu ermitteln? Zum Beispiel würde ich in meinem Modellordner gerne wissen, dass der Name des Arguments "someIdNumbers" war.

Antwort

6

Um den Namen des Arguments entdecken Sie die ModelBindingContext.ModelName Eigenschaft verwenden können

public class MyModelBinder : IModelBinder 
{ 
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var thisIsTheArgumentName = bindingContext.ModelName; 
    } 
} 
+0

Dieser Ansatz ist sehr praktisch für die Wiederverwendung des gleichen Bindemittels für mehrere verschiedene Argumente. – jonnybot

11

Das ModelBinder Attribut kann auf einzelne Parameter einer Aktion Methode angewendet werden:

public ActionResult Contact([ModelBinder(typeof(ContactBinder))]Contact contact) 

Hier ist die contact Parameter ist mit der ContactBinder gebunden.