MVC返回json和html响应

时间:2012-04-19 09:36:32

标签: jquery ajax asp.net-mvc json

嗨,我没有找到足够的答案解决我的问题。我需要从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以更新页面的一部分。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

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

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

至于做你正在做的事情的更好方法,这取决于val1-3是什么。它们是DOM元素,本地或全局范围的变量吗?你可以让你的PartialView发出调用某些函数的javascript来设置val1-3的值。类似的东西:

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调用的页面中。