如何从控制器返回两个部分视图作为HTML?

时间:2015-03-13 22:49:15

标签: jquery ajax asp.net-mvc

我通过Ajax调用我的MVC控制器动作,并希望该动作返回两个部分视图。两个部分视图都应以html格式返回。

这是我通过ajax调用的方式

    $.ajax({
        url: '/SomeController/GetContent',
        type: 'GET',
        dataType: "html",
        success: function (d, status, xhr) {
            $('#partial1') = d.?
            $('#partial2') = d.?
        },
        error: function (req, status, errorObj) {
            alert('error');
        }
    });

我尝试了类似这样的控制器动作:

    public PartialViewResult[] GetContent()
    {
        PartialViewResult[] pvs = new PartialViewResult[2];

        pvs[0] = PartialView("Partial1", null);
        pvs[1] = PartialView("Partial2", null);

        return pvs;
    }

如果我只返回一个局部视图(不作为数组返回),它可以工作,但对于两个我只是在ajax成功中返回一个空数组。任何想法如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

创建一个返回两个部分的视图

/Views/YourController/GetContent.cshtml

@Html.Partial("Partial1")
@Html.Partial("Partial2")

并将方法更改为

public PartialViewResult GetContent()
{
    return PartialView();
}

但是,如果您需要控制在调用此方法的视图中放置每个partial的位置,那么您将需要2个单独的方法和2个单独的ajax调用。

答案 1 :(得分:0)

我不确定你将要实现什么,但是你正在打破部分视图和绑定的基本绑定。 那些具有相同功能的部分视图,但是单独的信息然后放在单个部分视图中,或者如果你有不同的功能和单独的视图,那么绑定2 ajax调用。 替代方式您可以使用MVC6 viewcomponent的最新功能 http://www.asp.net/vnext/overview/aspnet-vnext/vc 或AngularJS状态绑定。