我想知道是否可以将视图作为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);
});
任何反馈都非常感谢。
答案 0 :(得分:3)
我真的不推荐这种方法 - 如果你想确保调用成功,请使用协议和jQuery库中内置的HTTPHeader。如果您查看$.ajax
的API文档,您可以对不同的HTTP状态代码有不同的反应 - 例如,有成功和错误回调。
使用这种方法,您的代码看起来像
$.ajax({
url: $(this).attr('action'),
type: 'POST',
data: $(this).serialize(),
dataType: 'HTML',
success: function(data, textStatus, XMLHttpRequest) {
alert(textStatus);
$('#test').html(data);
},
error: function(XmlHttpRequest, textStatus, errorThrown) {
// Do whatever error handling you want here.
// If you don't want any, the error parameter
//(and all others) are optional
}
}
动作方法只返回PartialView
:
public ActionResult ThisOrThat()
{
return PartialView("ThisOrThat");
}
但是,也可以按照自己的方式完成。您的方法的问题是您返回PartialView
本身,而不是输出HTML。如果您将其更改为此代码,则代码将起作用:
public ActionResult HelpSO()
{
// Get the IView of the PartialView object.
var view = PartialView("ThisOrThat").View;
// Initialize a StringWriter for rendering the output.
var writer = new StringWriter();
// Do the actual rendering.
view.Render(ControllerContext.ParentActionViewContext, writer);
// The output is now rendered to the StringWriter, and we can access it
// as a normal string object via writer.ToString().
// Note that I'm using the method Json(), rather than new JsonResult().
// I'm not sure it matters (they should do the same thing) but it's the
// recommended way to return Json.
return Json(new { success = true, Data = writer.ToString() });
}
答案 1 :(得分:0)
为什么要返回封装在JSON对象中的视图? 它可能会起作用,但它是下一个开发人员说“WTF?!?”的开门。
为什么不让你的动作返回PartialView调用$ .get()并注入它,甚至更好地调用
$("#target").load(url);
修改强>
好吧,既然你要发布值,你可以使用get或load,但是你的方法仍然没有多大意义...... 我想您将根据返回的json对象中的成功变量应用一些更改。但是你最好在服务器端保留这种逻辑,并根据你的条件返回一个或另一个视图。你可以返回一个JavascriptRersult,例如,一旦检索到它就会执行javascript ...或者返回2个不同的PartialViews。
答案 2 :(得分:0)
看看这个例子 http://geekswithblogs.net/michelotti/archive/2008/06/28/mvc-json---jsonresult-and-jquery.aspx
你应该能够返回this.Json(obj),其中obj只是你要序列化的数据。
此外,如果您使用类型设置为'json'的$ .getJSON或$ .ajax方法,那么结果将自动转换为客户端上的javascript对象,因此您可以使用数据而不是字符串。