如何在MVC2后返回JSON结果
本文关键字:返回 JSON 结果 MVC2 | 更新日期: 2023-09-27 18:02:20
我使用ajax post方法来发布表单,如:-
$(function () {
$('#BtnName').submit(function () { $.ajax({ url: 'Home/Index', type: "POST", data: $(this).serialize(), dataType: "json", async:false, contentType: 'application/json; charset=utf-8', success: function (data) { var message = data.Result; $("#Result").html(message); }, }); return false; }); });
在动作控制器,我返回
返回Json(new {Result = "Success"},JsonRequestBehavior.AllowGet);
i i ' m无法在div中获得结果;相反,它将整个渲染页面作为完整文件返回。请告诉我我应该怎么做才能在页面上显示结果,也想在同一页面上不清除表单。
好的,你的问题中包含的代码位绝对不足以得出任何结论。我们来做一个完整的例子
模型:
public class MyViewModel
{
public string Foo { get; set; }
}
控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new MyViewModel());
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
// TODO : process the model ...
return Json(new { Result = "Success" });
}
}
视图:
<% using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myForm" })) { %>
<%= Html.LabelFor(x => x.Foo) %>
<%= Html.EditorFor(x => x.Foo) %>
<input type="submit" value="Save" />
<% } %>
外部javascript不显眼地ajax化表单:
$(function () {
$('#myForm').submit(function () {
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
success: function (data) {
var message = data.Result;
$('#Result').html(message);
}
});
return false;
});
});
注意事项:
- 我将
.submit
事件附加到表单(#myForm
)的if,而在您的示例中,您使用的是#BtnName
,它看起来是表单的奇怪可疑名称。不幸的是,你没有显示你的标记所以我们不知道它实际上代表什么 - 我不再硬编码表单(
Home/Index
)的url,而是依赖于Html.BeginForm
生成的url。这样做有两个好处:1。你现在可以把你的javascript到一个单独的文件=>你不再混合标记和脚本,你的HTML页面现在变得更小,更快的加载(外部静态javascript文件缓存)。当你把你的应用部署到其他服务器上或者你决定改变你的路由时,它仍然可以工作,而不需要对你的js做任何修改。 - 我不再使用
contentType: 'application/json'
,因为当你使用$(this).serialize()
这不会序列化成JSON的形式。它将其序列化为application/x-www-form-urlencoded
样式。所以你基本上是在引入一个矛盾:你告诉服务器你将发送一个JSON请求,但实际上你没有。 - 我已经删除了
async: false
属性,因为这是一个同步请求,并在执行期间冻结浏览器。它不再是AJAX。所以,除非你需要这个,否则不要使用它。 - 我已经删除了
dataType: 'json'
参数,因为jQuery足够智能,可以从实际响应Content-Type
头中推断出这一点,并自动解析返回的JSON,并将其作为可以直接使用的javascript对象传递给成功回调。