2014-01-07 13 views
8

をGET使用して複雑なオブジェクトをバインド:私はメソッドを呼び出す場合はASP.Net MVCモデルは、私は私のWebプロジェクト内のクラスを持っている

public ActionResult TheControllerMethod(MyClass myParam) 
{ 
    //etc. 
} 

:私のコントローラメソッドのパラメータである

public class MyClass 
{ 
    public int? Param1 { get; set; } 
    public int? Param2 { get; set; } 
} 

POSTを使用すると、モデルバインディングは自動的に機能します(私はjs側で角を使用しますが、これは問題ではありません)。

$http({ 
    method: "post", 
    url: controllerRoot + "TheControllerMethod", 
    data: { 
     myParam: myParam 
    } 
}).success(function (data) { 
    callback(data); 
}).error(function() { 
    alert("Error getting my stuff."); 
}); 

GETを使用する場合は、コントローラー内のパラメーターは常にヌルです。

$http({ 
    method: "get", 
    url: controllerRoot + "TheControllerMethod", 
    params: { 
     myParam: myParam 
    } 
}).success(function (data) { 
    callback(data); 
}).error(function() { 
    alert("Error getting my stuff."); 
}); 

複雑なモデルが投稿のみのために働くのデフォルトのモデルバインダーを使用して結合ないか、私はGETでこの仕事をするために行うことができるものはありますか?

+3

を複雑なタイプの投稿のみ可能です。あなたは複合型でget要求を行うことができますが、それをクエリ文字列のsoemhowにシリアライズする必要があります –

答えて

10

答えははいです。 GETリクエストとPOSTリクエストの違いは、POSTボディにコンテンツタイプを持たせることができるため、XMLとしてサーバー側で正しく解釈できるようにすることです。 GETのために、あなたが持っているのは単なる疑問符です。

-2

なぜPOSTでプロパティ "data"を呼び出し、GETで "params"を呼び出していますか?両方とも「データ」と呼ばれるべきである。

$http({ 
    method: "get", 
    url: controllerRoot + "TheControllerMethod", 
    data: { 
     myParam: myParam 
    } 
}).success(function (data) { 
    callback(data); 
}).error(function() { 
    alert("Error getting my stuff."); 
}); 
8

ASP.NET MVCを使用すると、確かに限り、あなたはあなたのモデルクラスのプロパティ名のと同じクエリ文字列パラメータの名前を持っているとして、GET要求にをモデルにバインドすることができます。このanswerから例:

public class ViewModel 
{ 
    public string Name { set;get;} 
    public string Loc{ set;get;} 
} 

あなたはこの

MyAction?Name=jon&Loc=America 

のようなGET要求を行うことができますし、MVCは自動的にモデルバインドします:私は、簡単な答えはイエスであるあなたを信じ

[HttpGet] 
public ViewResult MyAction(ViewModel model) 
{ 
    // Do stuff 
    return View("ViewName", model); 
} 
関連する問題