2011-09-12 22 views
2

モデルバインディングを利用して、アクションメソッドのシグネチャ(2つのフィルタエンティティパラメータと通常のコントローラアクションパラメータ)内の3つの別々の場所に特定のパラメータ名を設定しました。ASP.NET MVC - 異なるエンティティで同じ名前の複数のパラメータをバインドするモデル - GETとPOSTが異なる?

すなわちEntity1とEntity2両方がその中somefieldた

public ViewResult foo(Entity1 something, Entity2 somethingelse, somefield) 

私はGETを使ってテストしましたが、すべて正常に動作しました。別の要求に対して私はPOSTを使用し、アクションメソッド内の全く同じ名前のパラメータだけが設定されました。エンティティ内の残りのパラメータは正しくマップされていました。私は別のパラメータでそれをテストし、同じ結果を見つけました。

ASP.NET MVCは、POST要求の特定の名前だけではなく、GET要求の特定のパラメータ名による複数のインスタンスのパラメータを設定しますか?これは "未定義"の動作であり、モデルバインダーの誤用ですか?

+0

GETリクエストに必要なように、これはどのように動作するようにルート設定をしていますか? –

答えて

4

私は他の何かが間違っていると確信しています。私は、次の

public class Foo 
{ 
    public string Name { get; set; } 
} 

public class Bar 
{ 
    public string Name { get; set; } 
} 

とコントローラのメソッドとしてでそれをテストした:

[HttpPost] 
public ActionResult Index(Foo bar, Bar foo, string Name) 
{ 

    return View(); 
} 

と、単純な

@using (Html.BeginForm("Index", "Home")) { 

    @Html.TextBox("Name") 

    <input type="submit" value="save" /> 
}  

ビュー用と期待どおりに動作しますが、両方のbar.Namefoo.Name、およびName自体は、送信時に指定された値で埋められます。

POSTとGETの違いはありません。定義された各パラメータについてだから

ParameterInfo[] parameterInfos = MethodInfo.GetParameters(); 
var rawParameterValues = 
     from parameterInfo in parameterInfos 
     select ExtractParameterFromDictionary(parameterInfo, parameters, MethodInfo); 

METHODINFOが実行されようとしてアクションメソッドを表すタイプSystem.Reflection.MethodInfoの目的であり、ここでも詳細にさらに移動する

が、これは、MVCは何であります与えられたメソッドに対して、オブジェクトのparametersからパラメータ値を取得しようとします。とりわけ、クエリ文字列によって提供されるものです。

関連する問題