ASP.Net MVC 模型使用 GET 绑定复杂对象
Posted
技术标签:
【中文标题】ASP.Net MVC 模型使用 GET 绑定复杂对象【英文标题】:ASP.Net MVC Model Binding Complex Object using GET 【发布时间】:2014-01-25 16:47:42 【问题描述】:我的网络项目中有一个类:
public class MyClass
public int? Param1 get; set;
public int? Param2 get; set;
这是我的控制器方法中的一个参数:
public ActionResult TheControllerMethod(MyClass myParam)
//etc.
如果我使用 POST 调用该方法,模型绑定会自动工作(我在 js 端使用 angular,这可能无关紧要):
$http(
method: "post",
url: controllerRoot + "TheControllerMethod",
data:
myParam: myParam
).success(function (data)
callback(data);
).error(function ()
alert("Error getting my stuff.");
);
如果我使用 GET,则该参数在控制器中始终为 null。
$http(
method: "get",
url: controllerRoot + "TheControllerMethod",
params:
myParam: myParam
).success(function (data)
callback(data);
).error(function ()
alert("Error getting my stuff.");
);
使用默认模型绑定器的复杂模型绑定是否仅适用于 POST,或者我可以做些什么来使用 GET?
【问题讨论】:
我相信简单的答案是肯定的,你只能发布一个复杂的类型。您可以使用复杂类型执行获取请求,但需要将其序列化到查询字符串 soemhow 参见***.com/questions/47931625/…中的示例 【参考方案1】:答案是肯定的。 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.");
);
【讨论】:
【参考方案3】:使用 ASP.NET MVC,您确实可以在 GET 请求上绑定您的模型,只要您的查询字符串参数名称与模型类的属性名称相同。来自 answer 的示例:
public class ViewModel
public string Name set;get;
public string Loc set;get;
您可以像这样执行 Get 请求
MyAction?Name=jon&Loc=America
MVC 会自动绑定你的模型:
[HttpGet]
public ViewResult MyAction(ViewModel model)
// Do stuff
return View("ViewName", model);
【讨论】:
以上是关于ASP.Net MVC 模型使用 GET 绑定复杂对象的主要内容,如果未能解决你的问题,请参考以下文章