2009-05-01 19 views
2

Lassen Sie uns sagen, ich habe eine Controller-Aktion wie folgt definiert:ASP.NET MVC-Modell Bindung und Aktionsparameter

public ActionResult(MyModel model, string someParameter) 
{ 
    // do stuff 
} 

ich ein benutzerdefiniertes Modell Bindemittel für die MyModel Typ haben, und es gibt ein Formularfeld namens „SomeParameter“ in der Ansicht, die nicht an das Modell gebunden ist. Wie kann ASP.NET MVC den Wert Request.Form["SomeParameter"] als Wert für das Argument "someParameter" an die Aktion übergeben?

Antwort

1

Da das Standardmodellbinder für einigeParameter verwendet wird, wenn Sie nicht anders angeben. Und das Standardmodellbinder tut genau das, was Sie beschreiben.

2

ASP.NET verwendet Reflektion, um die richtige Methode zum Aufrufen und zum Erstellen der zu übergebenden Parameter zu bestimmen. Es basiert auf dem FormCollection-Array. Im Grunde wird es Modell sehen. * Keysin dort und ein FormCollection["someParameter"] es zuerst versuchen Action(model,someParameter) dann Action(model) und dann Action(). Da es eine Aktion mit einem Modell und einigenParameter-Argumenten findet, versucht es dann, sie in die Argumenttypen zu konvertieren.

Jedoch standardmäßig tut es so blind, was einige Sicherheitsrisiken einführt, geht this blog post ins Detail darüber.

Wenn jemand einen Link veröffentlichen kann, der detaillierter beschreibt, wie ModelBinding unter der Haube durchgeführt wird, wäre das großartig.

0

Einer der einfachste Weg ist mit Html Elemente auf der Seite mit dem gleichen Namen wie die Eingabeparameter in der Aktionsmethode: Sie können mehr über sie im folgenden lesen. EX) In der Ansicht haben wir:

<input name="refNo" type="text"> 

dann im Aktionsmethode:

public ActionResult getOrders(string refNo) 

Also, es einfach den Wert von "RefNo" binden an die Eingangsparameter der "GetOrders" -Aktion .