我正在尝试使用Ajax.BeginForm()从我的控制器POST一个Json结果(我正在使用MVC3)。调用Json结果时,应将其发送到javascript函数并使用
提取对象var myObject = content.get_response().get_object();
但是,在尝试调用Ajax POST时,它只会抛出“Microsoft JScript运行时错误:对象不支持此属性或方法”。
我的代码:
控制器:
[HttpPost]
public ActionResult Index(string message)
{
return Json(new { Success = true, Message = message });
}
查看:
<!DOCTYPE html>
<html>
<head>
<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.js")" type="text/javascript"></script>
<script type="text/javascript">
function JsonAdd_OnComplete(mycontext) {
var myObject = mycontext.get_response().get_object();
alert(mycontext.Message);
}
</script>
</head>
<body>
<div>
@using(Ajax.BeginForm("Index", "Home", new AjaxOptions() { HttpMethod = "POST", OnComplete = "JsonAdd_OnComplete" }))
{
@Html.TextBox("message")
<input type="submit" value="SUBMIT" />
}
</div>
</body>
</html>
奇怪的是,完全相同的代码在MVC2中起作用 - 这是一个错误,还是我忘记了什么?
提前致谢。
答案 0 :(得分:3)
ASP.NET MVC 3 RC MSAX中的AFAIK已被弃用,支持所有Ajax.*
辅助方法使用的jQuery。 Javascript也变为unobtrusive。这意味着您不再需要致电.get_response().get_object()
,而只需:
function JsonAdd_OnComplete(myObject) {
// here myObject is already the JSON object
// as returned by the controller action
alert(myObject.Message);
}
答案 1 :(得分:1)
你看过OnSuccess
方法了吗?当调用该方法时,传递给它的对象是一个基于JSONResult的JSON对象,所以你可以这样做......
<script type="text/javascript">
function JsonAdd_OnSuccess(mycontext) {
alert(mycontext.Message);
}
</script>
@using(Ajax.BeginForm("Index", "Home",
new AjaxOptions() {
HttpMethod = "POST",
OnSuccess = "JsonAdd_OnSuccess" })) {
@Html.TextBox("message")
<input type="submit" value="SUBMIT" />
}
此外,OnComplete方法返回包含以下属性的对象
context.responseText
context.responseBody
context.responseXml
您必须eval()
responseText才能将文本转换为JSON。
答案 2 :(得分:0)
如果你使用BuildStarted提供的方法,这里是如何构建eval:
var json = eval("(" + context.responseText + ")");