【问题标题】:MVC return both json and html responseMVC 同时返回 json 和 html 响应
【发布时间】:2012-04-19 09:36:32
【问题描述】:

您好,我还没有为我的问题找到足够的答案。我需要从 ajax 调用的操作结果中返回 json 数据和 html。

$if (Request.IsAjaxRequest())
        {
            return Json(new
                            {
                                val1= Model.val1,
                                val2 = Model.val2,
                                val3= Model.val3,
                                Html = PartialView("_SearchResult", Model)
                            });
        }

在 ajax 成功部分我需要做什么? 这是不好的尝试:

$.ajax({
        type: "post",
        dataType: "json",
        url: actionUrl,
        data: {
            specs: selections,
            params: parameters
        },
        success: function (response) {
            $("#maincontent").html( response.html);
            val1= response.val1;
            val2= response.val2;
            val3= response.val3;
        },
        error: function (xHR) {
            alert(xHR.status);
        }
    });

Val1,2,3 是我需要知道的变量,因为模型数据正在改变,我需要知道这个改变的值。如果您知道如何返回比 json 更好的解决方案,请告诉我。但我还需要返回响应 html 以更新部分页面。 谢谢你帮助我。

【问题讨论】:

    标签: jquery ajax asp.net-mvc json


    【解决方案1】:

    PartialView 返回 ActionResult 而不是部分视图的 HTML 作为您希望的字符串。您需要做的是执行 ActionResult 以获取它将呈现的 HTML。

    有几种方法可以做到这一点,但one quick and dirty way is to follow this article

    至于更好的方法来做你正在做的事情,这取决于 val1-3 是什么。它们是 DOM 元素、局部变量还是全局变量?您可以让您的 PartialView 发出调用某些函数来设置 val1-3 值的 javascript。比如:

    public ActionResult Search()
    {
        // ... 
        return PartialView("_SearchResult", Model);
    }
    

    _SearchResult 部分视图:

    <!-- your html here -->
    <script type="text/javascript">
       UpdateVals(@Model.val1, @Model.val2, @Model.val3);
    </script>
    

    UpdateVals 是页面中的某个函数,用于进行 AJAX 调用。

    【讨论】:

    • 那么,在使用 UpdateVals() 函数更新这些模型属性时,我应该调用另一个 ActionResult 吗?我问这个问题的原因是模型没有在客户端更新它的值,因为它可能不再是一个对象。我需要以某种方式更新它的值。您确定我可以按照您的建议在客户端更新模型值吗?
    • 我想我需要查看原始视图和操作的相关部分才能理解并给您更清晰的答案。我基本上是这样看的:您的搜索表单有一个索引页面或类似的东西。这有一堆 JS,其中包括您的 AJAX 调用。这会触发您的搜索操作,返回您的搜索结果 HTML 以及这些 Model.val1-3。我不知道 val1-3 是什么,所以很难看出你在做什么。
    • 基本上我正在返回带有模型的部分视图。在我通过 ajax 返回模型后,我需要一种方法来访问模型的更改值。我的问题是,当我通过 jquery 访问模型时,我仍然看到模型的旧值,直到我重新加载整个页面(不使用 ajax)。这是正常行为吗?
    • 您如何/在哪里将模型存储在视图中?您在客户端上有模型的 JSON 副本吗?
    • 在视图中我只使用@Model 我现在不使用 json 存储整个模型()。现在我知道 json 是从响应中获取数据的好方法,但我不知道如何一次返回 html 和更新的模型值(例如在 json 中)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 2016-05-18
    • 2018-12-24
    • 2017-07-14
    • 2016-12-23
    • 1970-01-01
    相关资源
    最近更新 更多