javascript - Razor 和 Ajax : How to reload a table upon successful Ajax call?

标签 javascript jquery ajax asp.net-mvc razor

我有一个包含 Razor 代码的下表,它是一个用户列表以及每个用户的基本详细信息,以及编辑或删除每个用户的选项:

<table class="table table-striped">
        <tr bgcolor="#FF0000"><th>Username</th><th>User Role</th><th>User Privileges</th><th>Status</th></tr>
        @if (Model.Count() == 0)
        {
            <tr><td colspan="4" class="text-center">No User Accounts</td></tr>
        }
        else
        {
            foreach (AppUser user in Model)
            {
                if (!(user.UserName.ToLower().Equals("admin")))
                {
                    <tr>

                        <td>@user.UserName</td>
                        <td>@user.UserRole()</td>
                        <td>@user.UserPrivs()</td>
                        <td>
                            @if (@user.LockedOut)
                            {
                                @:Locked
                        }
                            else
                            {
                                @: Unlocked
                        }
                        </td>

                        <td>
                            @using (Html.BeginForm("Delete", "Admin",
                            new { id = user.Id }, FormMethod.Post, new { @id = "manageusersform", name = user.UserName }))
                            {
                                <button class="btn btn-primary btn-xs editUserBtn"
                                        data-id="@user.Id" name="@user.Id">
                                    Edit
                                </button>

                                <button class="btn btn-danger btn-xs"
                                        type="submit">
                                    Delete
                                </button>
                            }
                        </td>
                    </tr>
                }
            }
        }
</table>

<div style="text-align:center;">
  <button class="btn btn-primary btn-xs" id="addnewuser">
      Add New User
</button>

如上所示,还有一个添加新用户的按钮。单击该按钮将弹出一个弹出表单(ID 为 signupform)以输入新用户的详细信息,提交该表单后,将调用以下 javascript:

$("form#signupform").submit(function (event) {
        event.preventDefault();
        var form = $(this);
        $.post(form.attr("action"), form.serialize(), function (res) {
            if (res.status === "success") {

                alert(res.message);

                $(".form-control").val('');

                /*
                reload the table
                */

            }
            else {
                alert(res.message);
            }
        });

    });

我的目标是实现注释的重新加载表格,而不必重新加载整个页面,这就是我现在正在做的:

$("form#signupform").submit(function (event) {
        event.preventDefault();
        var form = $(this);
        $.post(form.attr("action"), form.serialize(), function (res) {
            if (res.status === "success") {

                alert(res.message);

                $(".form-control").val('');

                /*
                $.ajax({
                    url: "/Admin/Index",
                    cache: false,
                    data: {}
                }).done(function (htmlResponse) {
                    $("#tabs-1ua").html(htmlResponse);
                });
                */

            }
            else {
                alert(res.message);
            }
        });

    });

重新加载整个页面会导致一些 JavaScript 问题,例如弹出窗口不再工作,因此我现在尝试仅重新加载表格,并需要帮助。

谢谢。

最佳答案

您可以创建一个操作方法来返回表标记的部分 View 。

public ActionResult GetUserTable()
{
  var list = new List<AppUser>();
  // to do : Populate list with data from your data source( user table?)
  return PartialView(list);
}

并在 GetUserTable.cshtml 部分 View 中,输入当前用于呈现表格的 View 代码

@{ Layout = null; }
@model List<AppUser>
<table id="usreList">
  <!-- to do: loop throug model and render table rows) -->
</table>

您也可以在主视图中使用相同的操作方法。只需调用此操作方法即可

@Html.Action("GetUserTable","Users")
<div style="text-align:center;">
<button class="btn btn-primary btn-xs" id="addnewuser">
     Add New User
</button>

这将使用户表与您当前拥有的表相同。

现在,在 ajax 成功后,您可以通过异步调用此操作方法来重新加载用户表。

if (res.status === "success") {
  $("#usreList").load('/Users/GetUserTable');
}

最后,对于您连接的 jquery 事件以与新注入(inject)/动态 dom 元素一起使用,您需要使用 on 方法。

所以替换

$(".someClass").click(function(e){
  // do something
});

$(document).on("click",".someClass",function(e){
  // do something
});

关于javascript - Razor 和 Ajax : How to reload a table upon successful Ajax call?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39275719/

相关文章:

javascript - 根据 CSS 和内容选择包含行

javascript - 在没有 jquery 的情况下使用 javascript 解析 xml

jquery - 更改复选框边框颜色

php - 在 div 容器中启用拖放上传

javascript - 为什么我的ajax不发送在 Controller 端上传的图像?

ajax - 无法在 MVC 中传递与号和哈希符号

javascript - 检查 resize() 中窗口的宽度函数

javascript - 在 Knockout 组件中异步加载模板

javascript - 如何在 .html 标签内附加一个 jQuery 变量值

c# - 如何将参数传递给ajax调用