繁体   English   中英

如何使用 ajax asp.net 内核从数据库中获取数据

[英]how to get data from database using ajax asp.net core

根据以下代码,我在索引 Model 中创建了 Get Handler

public IActionResult OnGetCustomer(CustomerSearchModel searchModel)
        {
            
            CustomerCombine combine = new CustomerCombine
            {
                MyViewModels = _customerApplication.GetAll(searchModel)
            };

            return Partial("./Customer", combine);
        }

这是我的 Razor 视图:

@model CustomerCombine
 <form asp-page="./Index" asp-page-handler="Customer"
                   
                      method="get"
                      data-ajax="true"
                      data-callback=""
                      data-action="Refresh"
                     >
                    <div class="form-group">
                        <input asp-for="@Model.MySearchModel.FullName" class="form-control " placeholder="search..." />
                    </div>
                    <button class="customer-submit btn btn-success" type="submit">جستجو</button>
                </form>
<table>
 @foreach (var item in @Model.MyViewModels)
                {
                    <tr>
                        <td>@item.Id</td>
                        <td>@item.FullName</td>
                        <td>@item.Mobile</td>
                        <td>@item.Email</td>
                        <td>@item.Address</td>
                        <td>@item.Image</td>
                    </tr>
                }
</table>

我的模态显示成功,我可以看到我的数据库的数据,但是当我填写搜索字段并单击搜索按钮时,没有任何反应可以帮助我吗?:)

这是我的jquey代码:我对Jquery一无所知,这些代码已经准备好,现在我不知道我应该如何使用它

    $(document).on("submit",
        'form[data-ajax="true"]',
        function (e) {
            e.preventDefault();
            var form = $(this);
            const method = form.attr("method").toLocaleLowerCase();
            const url = form.attr("action");
            var action = form.attr("data-action");

            if (method === "get") {
                const data = form.serializeArray();
                $.get(url,
                    data,
                    function (data) {
                        CallBackHandler(data, action, form);
                    });
            } else {
                var formData = new FormData(this);
                $.ajax({
                    url: url,
                    type: "post",
                    data: formData,
                    enctype: "multipart/form-data",
                    dataType: "json",
                    processData: false,
                    contentType: false,
                    success: function (data) {
                        CallBackHandler(data, action, form);
                    },
                    error: function (data) {
                        alert("خطایی رخ داده است. لطفا با مدیر سیستم تماس بگیرید.");
                    }
                });
            }
            return false;
        });
});

function CallBackHandler(data, action, form) {
    switch (action) {
        case "Message":
            alert(data.Message);
            break;
        case "Refresh":
            if (data.isSucceced) {
                window.location.reload();
            } else {
                alert(data.message);
            }
            break;
        case "RefereshList":
            {
                hideModal();
                const refereshUrl = form.attr("data-refereshurl");
                const refereshDiv = form.attr("data-refereshdiv");
                get(refereshUrl, refereshDiv);
            }
            break;
        case "setValue":
            {
                const element = form.data("element");
                $(`#${element}`).html(data);
            }
            break;
        default:
    }
}

function get(url, refereshDiv) {
    const searchModel = window.location.search;
    $.get(url,
        searchModel,
        function (result) {
            $("#" + refereshDiv).html(result);
        });
}

1. $.get()的第三个参数是成功的function。

2.您的回发数据中没有isSucceced属性。 回发数据是部分视图 html 代码。 你需要使用$("xxx").html(data); 更新部分视图代码。

3.Model Binding 按名称绑定属性, <input asp-for="@Model.MySearchModel.FullName"/>CustomerSearchModel searchModel不匹配。

public IActionResult OnGetCustomer(CustomerSearchModel MySearchModel)

整个工作演示和更多细节我已经评论了代码请仔细检查:

Model

public class CustomerCombine
{
    public List<MyViewModel> MyViewModels { get; set; }
    public CustomerSearchModel MySearchModel { get; set; }
}
public class CustomerSearchModel
{
    public string FullName { get; set; }
}
public class MyViewModel
{
    public int Id { get; set; }
    public string FullName { get; set; }
    public string Email { get; set; }
    public string Mobile { get; set; }
    public string Address { get; set; }
    public string Image { get; set; }
}

查看(索引.cshtml)

@page
@model IndexModel
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal">
  Launch demo modal
</button>
<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
        <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
      </div>
      <div class="modal-body">
        @Html.Partial("Customer",Model.CustomerCombine)
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>
 
@section Scripts
{
    <script>
          $(document).on("submit",'form[data-ajax="true"]',function (e) {
            e.preventDefault();
            var form = $(this);
            const method = form.attr("method").toLocaleLowerCase();
            const url = form.attr("action");
            var action = form.attr("data-action");

            if (method === "get") {
                const data = form.serializeArray();
                $.get(url,data,function (data) { 
                        console.log(data);    //you can check the response data in Console panel
                        CallBackHandler(data, action, form);
                    });
            } else {
                var formData = new FormData(this);
                $.ajax({
                    url: url,
                    type: "post",
                    data: formData,
                    enctype: "multipart/form-data",
                    dataType: "json",
                    processData: false,
                    contentType: false,
                    success: function (data) {                        
                        CallBackHandler(data, action, form);
                    },
                    error: function (data) {
                        alert("خطایی رخ داده است. لطفا با مدیر سیستم تماس بگیرید.");
                    }
                });
            }
            return false;
        });
//});    //remove this.......

    function CallBackHandler(data, action, form) {
        switch (action) {
            case "Message":
                alert(data.Message);  
                break;
            case "Refresh":
                $(".modal-body").html(data);      //modify here....
                break;
            case "RefereshList":
                {
                    hideModal();
                    const refereshUrl = form.attr("data-refereshurl");
                    const refereshDiv = form.attr("data-refereshdiv");
                    get(refereshUrl, refereshDiv);
                }
                break;
            case "setValue":
                {
                    const element = form.data("element");
                    $(`#${element}`).html(data);
                }
                break;
            default:
        }
    }

    function get(url, refereshDiv) {
        const searchModel = window.location.search;
        $.get(url,
            searchModel,
            function (result) {
                $("#" + refereshDiv).html(result);
            });
    }
    </script>
}

局部视图不会改变任何东西

@model CustomerCombine

 <form asp-page="./Index" asp-page-handler="Customer"
                   
                      method="get"
                      data-ajax="true"
                      data-callback=""
                      data-action="Refresh"
                     >
                    <div class="form-group">
                        <input asp-for="@Model.MySearchModel.FullName" class="form-control " placeholder="search..." />
                    </div>
                    <button class="customer-submit btn btn-success" type="submit">جستجو</button>
                </form>
<table>
 @foreach (var item in @Model.MyViewModels)
                {
                    <tr>
                        <td>@item.Id</td>
                        <td>@item.FullName</td>
                        <td>@item.Mobile</td>
                        <td>@item.Email</td>
                        <td>@item.Address</td>
                        <td>@item.Image</td>
                    </tr>
                }
</table>

页面模型

public IActionResult OnGetCustomer(CustomerSearchModel MySearchModel)//change here....
{

    CustomerCombine combine = new CustomerCombine
    {
        MyViewModels =  _customerApplication.GetAll(searchModel) //be sure here contains value...
    };

    return Partial("./Customer", combine);
}

结果:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM