如何在当前视图加载时将另一个视图加载为PartialView?

时间:2018-03-26 18:45:53

标签: asp.net-mvc asp.net-core-mvc partial-views asp.net-mvc-partialview

我对此比较陌生。我正在处理这个ASP.NET Core MVC项目,我想在PartialView HistoryTable.cshtml中加载<div>Main View Main ViewLocate.cshtml加载。换句话说,只要PartialView加载/重新加载,我希望MainView在那里。

我是按照以下方式实施的:

Locate.cshtml

@model Project.Models.CustomModels.LocationsHistoryViewModel
<div class="container">
...
    <div id="divLocationsHistoryTable"></div>
...
</div>

@section Scripts {
<script type="text/javascript">

    $(document).ready(function () {
        $(".disabledropdowncntrl").prop('disabled', false).trigger("chosen:updated");
        $("#divLocationsHistoryTable").load("/Project/HistoryTable");
    });

HistoryTable.cshtml

@model IEnumerable<Project.Models.CustomModels.LocationsHistoryViewModel>
<div class="card">
...
@if(Model.Count() != 0)
{
    <thead>
        <tr>
            <th data-column-id="UserId" data-type="string" data-identifier="true" hidden>User ID</th>
            <th data-column-id="Name">Name</th>
            ...
        </tr>
    </thead>

}
else
{
    ...
}
<tbody>
    @foreach(var item in Model)
    {
        <tr>
            <td>
                @item.User.FirstName @item.User.LastName
            </td>
            ...
        </tr>
    }
</tbody>
</div>

控制器:找到ActionMethod

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Locate(int Id, InventoryLocationsHistoryViewModel locationsHistoryVM)
{
    ...
    var HistoryObject = _context.History
        .Include(...
        .Where(...
        .Select(...
    {
        ...
    }).ToList();

    return PartialView("/Project/HistoryTable", HistoryObject);
}

怎么办?

修改

我面临的问题类似于this question,但不同之处在于我必须在此处使用Submit按钮,因为我在这里提交form。单击时Submit按钮必须执行两项操作:

  1. form详细信息保存到数据库中。
  2. 始终更新必须显示在HistoryTable按钮下方的Submit。必须始终显示此HistoryTable(甚至在点击Submit之前)。因此,我无法使用Button

1 个答案:

答案 0 :(得分:0)

这里存在许多问题,因此要弄清楚你实际上想要实现的目标有点困难。

首先,您的Locate操作应该在GET和POST上返回您的Locate.cshtml视图。该视图包含您的HistoryTable.cshtml部分视图这一事实是一个实现细节。如果您只在POST上返回部分内容,则您只会在浏览器中使用部分HTML,而不是完整的Locate视图。

然后,您似乎尝试使用jQuery的load方法来加载您的实际部分,而不是返回该部分的操作。你无法直接获得视图;您需要向与返回该部分的操作相关联的路径提交AJAX请求(load正在做什么)。

接下来,看起来你的部分需要一个有效载荷,即某个对象需要被发布&#34;为了它的工作。如果是这种情况,您需要将需要发布的JavaScript对象表示作为第二个参数传递给load方法。实际上,它只是直接发出GET请求,不传递任何数据。

但是,由于您只是在页面加载时执行此操作,因此会对您为什么要使用AJAX产生疑问。只有在页面加载后需要更改以后的内容时,AJAX才有意义。如果您在加载时正在执行AJAX请求,则应该从头开始构建它,从而无需单独的请求。

最后,虽然当您将模型包含在页面中时可以将模型传递给局部视图,但您实际上在这里寻找的内容更可能是view component,即实际上能够实现的内容像从数据库中查询一样做逻辑,与主要的请求分开。