我只是想将一个简单的对象传递给MVC控制器方法,而不必为它创建一个视图模型。尽管id被调用,但控制器方法中的参数始终为null。我的jquery帖子如下。
$(function () {
$("button[id$='addidentifier']").click(function (evt) {
alert('button click');
evt.preventDefault();
var postdata = {
identifier: $('#Identifier').val(),
goldkey: $('#Goldkey').val()
};
$.ajax({
type: 'POST',
url: 'altbloomberg/AddIdentifier',
data: JSON.stringify({ postdata : postdata }) ,
success: function(data) {
alert('data: ' + data);
},
failure: function(a,b,c) {
alert(a);
},
//contentType: "application/json",
dataType: 'json'//,
//processData: false
});
});
控制器方法很简单,我甚至没有完成它的主体因为我想先将数据传入。
[System.Web.Http.HttpPost]
public ActionResult AddIdentifier(string postdata)
{
// put here to place a breakpoint to look at postdata
string lookhere = "";
}
我看过其他帖子,这就是他们“似乎”表示要做的事情。这似乎应该很容易。那么我在这里做错了什么?
根据以下一些建议:我更改了jquery函数以传递
$.ajax({
type: 'POST',
url: 'altbloomberg/AddIdentifier',
contentType: "application/json",
dataType: 'json',
data: JSON.stringify(postdata),
success: function(data) {
alert('data: ' + data);
},
failure: function(a,b,c) {
alert(a);
}
});
我刚刚更改了stringify方法params并设置了内容类型,然后将控制器参数更改为
(string identifier, string goldkey).
这适用于stringify方法的结果
"{"identifier":"XS0939678792","goldkey":"LAW"}"
那么为什么我只是在控制器方法中使用一个参数
(String postdata)
并使用
JSON.Stringify({postdata:postdata})
其结果是
"{"postdata":{"identifier":"XS0939678792","goldkey":"GOVT"}}" does it NOT work.
控制器方法不应该匹配postdata json值吗?
答案 0 :(得分:3)
我认为您必须创建一个简单的模型来接收数据。
例如,这是您的行动:
[System.Web.Http.HttpPost]
public ActionResult AddIdentifier(PostDataModel postdata)
{
}
其中PostDataModel
是具有此结构的简单模型:
class PostDataModel {
public string Identifier {get;set;}
public string GoldKey {get;set;}
}
您必须在ajax请求中启用此行:
contentType: "application/json",
答案 1 :(得分:2)
AddIdentifier操作的参数应该是具有'identifier'和'goldkey'属性的模型,或者是每个属性的字符串参数。
像这样:
[System.Web.Http.HttpPost]
public ActionResult AddIdentifier(Identifier model)
或者这个:
[System.Web.Http.HttpPost]
public ActionResult AddIdentifier(string identifier, string goldkey)
如果您真的想要字符串化数据,那么您可以将dataType:'json'输出,它只会发送字符串。
修改强>
根据您的评论,您似乎想要更具动感的内容。您可以将postdata参数的类型从字符串更改为动态。我不确定这是否可以开箱即用。如果不是,您可以创建自己的自定义模型绑定器以将数据绑定到动态参数。
http://www.codeproject.com/Articles/605595/ASP-NET-MVC-Custom-Model-Binder
如果我是你,我会坚持创建模型或定义参数的前两个选项之一。