【问题标题】:How to return two partial views from controller as html?如何从控制器返回两个部分视图作为 html?
【发布时间】:2015-05-16 14:01:06
【问题描述】:

我通过 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 个局部视图的单个视图。
  • 谢谢。你能说明这是怎么做到的吗?
  • 如果您发送pvs,因为 json 数组可以遍历数组并插入到适当的元素中。相应调整dataType
  • @charlietfl:我认为这行不通,因为如果我将它作为 json 返回,我将完全丢失 html。
  • json中的html示例jsfiddle.net/5ndq8qzv

标签: jquery ajax asp.net-mvc


【解决方案1】:

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

/Views/YourController/GetContent.cshtml

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

并将方法更改为

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

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

【讨论】:

  • 谢谢,但我需要使用 JQuery 在我的视图中手动添加部分,因此可能必须按照您的建议进行两个单独的调用。
  • 而且由于 ajax 是异步的,它可能会提供更好的响应时间。
  • 不必发出2个请求,可以通过包装$()并使用jQuery方法来过滤响应以获取DOM中每个元素的内容
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多