关于jquery:如何从控制器返回两个部分视图作为html?

How to return two partial views from controller as html?

我通过Ajax调用我的MVC控制器操作,并希望该操作返回两个局部视图。两个部分视图都应作为HTML返回。

这就是我通过Ajax调用的方法

1
2
3
4
5
6
7
8
9
10
11
12
    $.ajax({
        url: '/SomeController/GetContent',
        type: 'GET',
        dataType:"html",
        success: function (d, status, xhr) {
            $('#partial1') = d.?
            $('#partial2') = d.?
        },
        error: function (req, status, errorObj) {
            alert('error');
        }
    });

我为控制器操作尝试了类似的操作:

1
2
3
4
5
6
7
8
9
    public PartialViewResult[] GetContent()
    {
        PartialViewResult[] pvs = new PartialViewResult[2];

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

        return pvs;
    }

如果我只返回一个部分视图(不是作为数组返回),那么它是有效的,但是对于两个视图,我只会在Ajax成功中得到一个空数组。有什么解决办法吗?


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

/视图/yourcontroller/getcontent.cshtml

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

把方法改为

1
2
3
4
public PartialViewResult GetContent()
{
    return PartialView();
}

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


我不确定您将要实现什么,但您正在打破局部视图和绑定的基本绑定。这两个部分视图是否都具有相同的功能,但又有不同的信息,然后放入单个部分视图中,或者如果您具有不同的功能,则使用单独的视图绑定2个Ajax调用。另一种方法是使用MVC6 ViewComponent的最新功能http://www.asp.net/vnext/overview/asp net-vnext/vc或AngularJS状态绑定。