2014-01-07 187 views
8

我有一個類在我的web項目的複雜對象:ASP.Net MVC模型綁定使用GET

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

這是在我的控制器方法的參數:

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

如果我調用該方法使用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."); 
}); 

是否使用默認的模型綁定只上崗工作的複雜模型的結合,或者是有什麼我可以做,以使這一工作得到什麼?

+3

我認爲簡單的答案是肯定的,你只能發佈複雜類型。你可以做一個複雜類型的get請求,但需要將它序列化到查詢字符串soemhow –

回答

10

答案是肯定的。 GET和POST請求之間的區別在於POST主體可以具有內容類型,因此它們可以在服務器端正確解釋爲XML或Json等等;對於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); 
}