【问题标题】:PartialView is not updating with new dataPartialView 未使用新数据进行更新
【发布时间】:2018-11-09 14:44:54
【问题描述】:

默认情况下,我在局部视图中加载所有数据

Index.cshtml 中的 html 代码

@model GMWUI.ViewModel.MessageDisplayModel

<div id="divTblMsg" class="grid-content">
    @{
        Html.RenderPartial("filterMessages", Model);
    }
</div>

HomeController.cs

public async Task<IActionResult> Index()
    {

        messageDisplayModel.Messages = await ApiClientFactory.Instance.GetMessages();

        return View(messageDisplayModel);
    }

当用户点击带有搜索条件的过滤器按钮时 我正在从 web api 获取过滤数据到我的家庭控制器 filtermessage 方法

这是我单击过滤器按钮时的 ajax 调用

     $.ajax({
            method: 'post',
            url: "Home/postMessage",
            data: JSON.stringify(model),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                //my table element id is divTblMsg
                $("#divTblMsg").html(data);
            }
        });

HomeController.cs

[HttpGet]
public async Task<IActionResult> filterMessages(GetMessageParams searchCriteria)
        {
            //I though adding below line will clear old data should update partial view with filtered data, but it is not working.
            messageDisplayModel.Messages = Enumerable.Empty<Messages>(); 
            messageDisplayModel.Messages = await ApiClientFactory.Instance.GetMessages(searchCriteria);
         //I am getting filtered data to messageDisplayModel.messages and I am passing it to partial view 
            return PartialView("filterMessages", messageDisplayModel.Messages);
        }

我找不到问题

【问题讨论】:

  • 你试过调试代码吗?如果您在返回 PartialView 的代码行设置断点,它是否会到达该断点,并且是否填充了 Messages 变量?
  • 能否将控制器方法 postMessage 添加到问题中的 homecontroller.cs 源中

标签: asp.net asp.net-mvc asp.net-core-mvc


【解决方案1】:

这是偶然的,因为您的 AJAX 方法是 posting 到 Home/postMessage,而不是 geting 从 filterMessages 到您已用 [HttpGet] 过滤器标记的 [HttpGet]

【讨论】:

  • 我已经用“get”更新了我的 ajax 调用,但它不起作用
  • 您也更改了url 的值吗?您浏览器中的网络日志是否显示任何错误或响应?
  • 响应状态为 200,在浏览器开发者工具网络部分的预览和响应选项卡中,视图正在加载更新的 HTML,但我的部分视图仍显示旧数据
【解决方案2】:

尝试更改 URL 路径以与控制器操作名称完全匹配,并且方法类型等于该操作上设置的属性:

$.ajax({
    method: 'GET', // or type: 'GET'
    url: '@Url.Action("filterMessages", "Home")',
    data: JSON.stringify({ searchCriteria: model }), // here you should include action parameter name
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (data) {
        $("#divTblMsg").html(data);
    }
});

如果您想使用POST 方法,只需将[HttpGet] 替换为[HttpPost] 并遵循如上所示的URL 约定。

还要注意,您应该确保传递的model 包含对象(定义为var model = {}; 的对象),然后为model 属性赋值。

【讨论】:

  • 视图正在谷歌浏览器的网络标签浏览器开发人员工具中加载,但未在 UI 中显示 网格仍在 UI 中显示旧数据
【解决方案3】:

我通过如下更新我的 ajax 调用解决了这个问题。

       $.ajax({
        method: 'GET',
        url: '@Url.Action("filterMessages", "Home")',
        async: true,
        cache: false,
        data: model,
        dataType: 'HTML',
        success: function (data) {
            $("#divTblMsg").html(data);
        }
    });

我已更新 Method to Get,因为我正在使用 Get 属性作为我的操作结果,并将 urldataType 更新为 HTML,因为我们将得到响应在 HTML 中

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-31
    • 2013-08-17
    相关资源
    最近更新 更多