2009-05-01 16 views
2

はのは、私のようにコントローラのアクションが定義されているとしましょうパラメータ:私はmymodelというタイプのカスタムモデルバインダーを持ってASP.NET MVCモデルバインディングとアクション

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

、および「SomeParameter」と呼ばれるフォームフィールドがありますそのモデルに束縛されていないビューでASP.NET MVCは、アクションに「someParameter」引数の値としてRequest.Form["SomeParameter"]の値を渡すことをどのように知っていますか?

答えて

1

特に指定しない限りsomeParameterにデフォルトのモデルバインダーが使用されるためです。そして、デフォルトのモデルバインダーは、あなたが何を記述しているかを正確に行います。

2

ASP.NETはリフレクションを使用して、呼び出す正しいメソッドを決定し、渡すパラメータを構築します。これは、FormCollection配列に基づいています。基本的にそれはモデルを参照してください* KeysinとFormCollection["someParameter"]それは最初にAction(model,someParameter)を試し、次にAction(model)としてAction()を試してみます。これは、model引数とsomeParameter引数を持つActionが見つかったので、それらを引数型に変換しようとします。

しかし、デフォルトでは、これはあまり目立たないので、セキュリティ上のリスクがあります。this blog postではこれについてさらに詳しく説明しています。

誰かが、ModelBindingがどのように優れているのかを詳しく説明するリンクを投稿できる場合は、

1

Phil Haackには、How a Method becomes an Actionの投稿があり、この解像度がどうなるかを説明しています。

+0

うん、それはフィル・ハックじゃない。 Haack'dに行ったことがありますか? – Sean

0

一つは、アクションメソッドで入力パラメータと同じ名前のページ上のHTMLアイテムを持っています。ビューで EX)私たちが持っている:Actionメソッドで次に

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

public ActionResult getOrders(string refNo) 

だから、それは単に "getOrders" の入力パラメータに "REFNO" の値をバインドするアクション。

関連する問題