PartialView不会使用新数据进行更新

时间:2018-11-08 19:36:51

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

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

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);
        }

我找不到问题

3 个答案:

答案 0 :(得分:2)

是偶然的,因为您的AJAX方法是post的{​​{1}}而不是Home/postMessage的{​​{1}},而您使用的标记是get过滤器?

答案 1 :(得分:1)

尝试更改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属性分配值。

答案 2 :(得分:1)

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

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

我已将获取方法更新为我将动作结果使用获取属性,并将 url dataType更新为HTML,因为我们将获得响应是HTML