【问题标题】:Filter data based on query and return result using Partial view根据查询过滤数据并使用部分视图返回结果
【发布时间】:2017-02-20 19:32:52
【问题描述】:

我正在尝试根据查询过滤数据。我正在使用部分视图来显示过滤后的数据。但是,局部视图中没有任何更新。我该如何解决这个问题?

控制器类:

public IActionResult Index() {
    IEnumerable<Organisation> organisations = _organisationRepository.GetAll().OrderBy(b => b.Name).ToList();

    if (isAjaxRequest()) {
        string text = Request.Form["text"].ToString();
        return PartialView("_Organisations", _organisationRepository.GetByName(text).ToList());
        }

        return View(organisations);
    }

private bool isAjaxRequest() {
        return Request != null && Request.Headers["X-Requested-With"] == "XMLHttpRequest";
    }

组织视图:

<form asp-controller="Organisation" asp-action="Index">
<div class="form-inline">
    <div class="form-group">

        <label for="text">Filteren in organisaties</label>
        <input type="text" name="text" id="text" required pattern="^([0-9]{4}|[a-zA-Z]+)$">

        <label for="selected"></label>
        <select name="selected" id="selected" class="form-control">
            <option value="name">Naam</option>
            <option value="postalcode">Postcode</option>
        </select>
    </div>

    <button type="submit" class="btn btn-default" id="search">Zoeken</button>
</div>
</form>

<div id="partial">
    @Html.Partial("_Organisations", Model);
</div>

局部视图:

<table class="table table-striped table-condensed table-bordered">
<tr>
    <th>Naam</th>
    <th>Adres</th>
    <th></th>
</tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @item.Name
        </td>
        <td>
            @item.Location.ToString()
        </td>
        <td>
            <a onClick="showForm(this, @item.OrganisationId)" href="#">Selecteer</a>
        </td>
    </tr>
}

Javascript 文件:

$("#search").click(function () {
    $.ajax({
    url: "Organisation/Index",
    type: "post",
    data: $("form").serialize(),
    success: function (result) {
        $("#partial").html(result);
        }
    });
});

任何帮助将不胜感激!

【问题讨论】:

    标签: c# .net ajax forms asp.net-core-mvc


    【解决方案1】:

    第一个答案(不正确):如果不是拼写错误,您在 jquery $("#search").click(function () { 中忘记了 $。

    新答案:我认为这是错误:您必须阻止点击事件的正常行为。更改您的 javascript 函数(2 处修改):

            $("#search").click(function (e) {
    
                e.preventDefault();
    
                $.ajax({
                    url: "Organisation/Index",
                    type: "post",
                    data: $("form").serialize(),
                    success: function (result) {
                        $("#partial").html(result);
                    }
                });
            });
    

    现在函数在参数中使用 e(事件),在我们进行 Ajax 调用之前,我们需要调用 e.preventDefault(); 错误是 Ajax 调用返回了部分视图,#partial html 已更新,但是那么“点击”的正常行为将使用 HTTP GET 请求重新加载页面

    【讨论】:

    • 这是一个错字!感谢让我知道我在问题中更改了它!
    • 好的。代码中肯定还有一个我们看不到的小错误。你试过检查每一个电话吗? 1. 在 $.ajax 调用的 javascript 中设置断点 2. 在 Index 动作控制器的入口处设置断点(在 Visual Studio 调试中运行) 3. 将部分视图结果插入到变量之前返回并设置断点在那里确保您从视图中得到一些东西 4. 在 Javascript 中放置第二个断点,在成功函数中这是一个好的开始。告诉我们到达或未到达哪些断点
    • 好了,到了前两个断点。当我继续调试时,我发现了一些奇怪的东西。当我没有在 html 输入框中输入任何文本时,控制器中的变量文本为空,它返回一个包含所有包含“空”字符串的元素的局部视图,在我的例子中是所有元素。奇怪的是,当我在 html 输入框中输入文本时,控制器返回视图(组织),然后返回部分视图,但页面上没有任何视觉变化。
    • 我明白了。我编辑了我的答案,它应该适合你。
    • 感谢您的帮助!有效!我将您的答案标记为解决方案!
    猜你喜欢
    • 2013-02-20
    • 1970-01-01
    • 2021-05-21
    • 2013-07-20
    • 2013-09-29
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多