我是MVC和这种编程的新手,我想这是非常微不足道的,但经过5个小时的搜索和尝试,我觉得被击败了。我的视图中有一个看起来像这样的帖子;
$.ajax({
url: '@Url.Action("Moo")',
type: "post",
dataType: "string",
contentType: "json",
data: JSON.stringify({"foo": "bar"}),
success: function (data) {}
});
});
然后我在控制器中有一个看起来像这样的函数;
Function Moo(test As String) As ActionResult
Return View()
End Function
当我运行它时,调试器显示我到达了Return语句,但我没有得到任何测试来分配任何值(foo:bar)。
我的另一个考虑因素是,当我设法从ajax函数中恢复数据时,我可以将其转换回JSON,还是我必须在模型中创建自己的类并将varibles分配给该类? / p>
任何输入都会受到影响。
答案 0 :(得分:1)
参数/属性名称应匹配。
因此,如果您希望在操作中使用名称为test
的值,则需要使用密钥test
发送值。因此,将foo
更改为test
:
$.ajax({
url: '@Url.Action("Moo")',
type: "post",
dataType: "string",
contentType: "application/json",
data: JSON.stringify({"test": "bar"}),
success: function (data) {}
});
});
请注意,JSON的正确contentType为application/json
如果您有更复杂的数据,例如JSON.stringify({"test": "bar", "test1":"bar1"}),
您可以在服务器端创建一个对象(抱歉C#)
public class MyClass
{
public string test { get; set; }
public string test1 { get; set; }
}
然后你可以在你的行动中使用这个模型:
Function Moo(test As MyClass) As ActionResult
Return View()
End Function
MVC模型绑定器将解析数据并填充属性。您可以在此处开始了解模型绑定:The Features and Foibles of ASP.NET MVC Model Binding
答案 1 :(得分:0)
这是另一种你可能想尝试的方法 [虽然它可能不是最好的]
$.ajax({
url: '@Url.Action("Moo")?test="testdata"',
type: "post",
dataType: "string",
contentType: "json",
data: JSON.stringify({"test": "bar"}),
success: function (data) {}
});
});
您传递的参数名称应与服务器上操作方法的参数名称匹配。
答案 2 :(得分:0)
我认为你必须改变这个:
$.ajax({
url: '@Url.Action("Moo")',
type: "post",
dataType: "text", //<---------------------this
contentType: "application/json", // <-----this
data: JSON.stringify({"foo": "bar"}),
success: function (data) {}
});
});
或者您也可以尝试更改它:
data: {foo : "bar"},
dataTypes是:
"xml"
:返回可以通过jQuery处理的XML文档。"html"
:以纯文本形式返回HTML;包含的脚本标记在插入DOM时进行评估。"script"
:将响应评估为JavaScript并将其作为纯文本返回。"json"
:将响应评估为JSON并返回JavaScript对象。"jsonp"
:使用JSONP加载JSON块。添加额外的“?callback =?”在您的网址末尾指定回调。"text"
:纯文本字符串。