jquery 在ASP中,View是否可以作为JSON对象返回,Net MVC

2ledvvac  于 2023-04-29  发布在  jQuery
关注(0)|答案(3)|浏览(175)

我想知道是否可以将视图作为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);

                    });

任何反馈都非常感谢。

ohfgkhjo

ohfgkhjo1#

我真的不推荐这种方法--如果你想确保调用成功,请使用协议和jQuery库中内置的HTTPHeader。如果你看一下$.ajax的API文档,你会发现你可以对不同的HTTP状态码有不同的React--例如,有成功和错误回调。使用这种方法,您的代码看起来就像

$.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
           }
    }

action方法简单地返回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() });
}
fzwojiic

fzwojiic2#

为什么要返回封装在JSON对象中的视图?它可能会工作,但它是一个开放的大门,为下一个开发人员说:“WTF?!?”
为什么不让你的操作返回调用$的PartialView。get()并注入它,或者更好地调用

$("#target").load(url);

编辑:

好吧,既然要提交值,显然可以使用get或load,但您的方法仍然没有多大意义。..我想你会根据返回的json对象中的success变量应用一些更改。但是您最好将这种逻辑保留在服务器端,并根据您的条件返回一个或另一个视图。例如,您可以返回一个Javascript Rersult,它将在检索到JavaScript片段时立即执行。..或返回2个不同的PartialViews。

2eafrhcq

2eafrhcq3#

看看这个例子Link
你应该能把这个还回去。Json(obj),其中obj只是您要序列化的数据。
如果你使用$。getJSON或$。 AJAX 方法的类型设置为'json',那么结果将自动转换为客户端上的javascript对象,这样你就可以使用数据而不是字符串。

相关问题