我想知道是否可以将视图作为JSON对象返回。在我的控制器中,我想执行如下操作:
[AcceptVerbs("Post")]
public JsonResult SomeActionMethod()
{
return new JsonResult { Data = new { success = true, view = PartialView("MyPartialView") } };
}
在html中:
$.post($(this).attr('action'), $(this).serialize(), function(Data) {
alert(Data.success);
$("#test").replaceWith(Data.view);
});
任何反馈都非常感谢。
3条答案
按热度按时间ohfgkhjo1#
我真的不推荐这种方法--如果你想确保调用成功,请使用协议和jQuery库中内置的HTTPHeader。如果你看一下
$.ajax
的API文档,你会发现你可以对不同的HTTP状态码有不同的React--例如,有成功和错误回调。使用这种方法,您的代码看起来就像action方法简单地返回
PartialView
:但是,是的,它也可以用你的方式来做。您的方法的问题在于返回的是
PartialView
本身,而不是输出HTML。如果将代码更改为以下内容,则代码将正常工作:fzwojiic2#
为什么要返回封装在JSON对象中的视图?它可能会工作,但它是一个开放的大门,为下一个开发人员说:“WTF?!?”
为什么不让你的操作返回调用$的PartialView。get()并注入它,或者更好地调用
编辑:
好吧,既然要提交值,显然可以使用get或load,但您的方法仍然没有多大意义。..我想你会根据返回的json对象中的success变量应用一些更改。但是您最好将这种逻辑保留在服务器端,并根据您的条件返回一个或另一个视图。例如,您可以返回一个Javascript Rersult,它将在检索到JavaScript片段时立即执行。..或返回2个不同的PartialViews。
2eafrhcq3#
看看这个例子Link
你应该能把这个还回去。Json(obj),其中obj只是您要序列化的数据。
如果你使用$。getJSON或$。 AJAX 方法的类型设置为'json',那么结果将自动转换为客户端上的javascript对象,这样你就可以使用数据而不是字符串。