1

我有一个名为Index.cshtml的视图,其中包含一个用户表(创建/编辑/更新功能)。

在此处输入图像描述

单击按钮(创建/编辑/更新)时,我有一个 jQuery 对话框。接下来我使用这样的 ajax 帖子:

  • 编辑>>调用一个动作控制器进行编辑并返回一个json>>用javascript更新行表
  • 删除 >> 调用一个动作控制器来删除并返回一个 json >> 用 javascript 删除行表
  • 创建 >> 调用一个动作控制器来创建并重定向到 Index.cshtml >> ???

对于创建部分,我有一个问题:我想“简单地”显示我的视图,但我在一个 ajax 帖子中。我不知道该怎么做。

这是我的代码(提交数据然后刷新视图):

        $.post($(this).attr('action'), $(this).serialize(), function (data, status) {
            $('#my-modal').modal('hide');

            if (data.operation == 'edit') {
                // Edit
                var row = $('#' + data.userid);
                row.children(':eq(0)').text(data.company);
                row.children(':eq(1)').text(data.username);
                row.children(':eq(2)').text(data.email);
                row.children(':eq(3)').text(data.firstname);
                row.children(':eq(4)').text(data.lastname);
            } else if (data.operation == 'delete') {
                // Delete
                var row = $('#' + data.userid);
                row.remove();
            } else {
                // Create
                alert(data);
                $("#userList").html(data);
            }
        })

如您所见,我检查了 data.operation,它告诉我是否对(最后一种可能性)“创建”进行了“编辑”或“删除”。对于创建问题,我的整个视图(< html> < body> ...)已生成并添加到我的#userList div 中。那是重复的东西。

也许这不是正确的做法?

谢谢。


更新

这是我的创建操作:

    [HttpPost]
    public ActionResult Create(UserCreateViewModel viewModel)
    {
        if (!ModelState.IsValid)
        {
            this.Response.StatusCode = 400;
            return PartialView("Create", viewModel);
        }

        var userDTO = new UserDTO();
        Mapper.Map(viewModel, userDTO);
        _requestServiceClient.CreateNewUser(userDTO);
        return RedirectToAction("Index");
    }

这是我的索引操作:

    [Authorize]
    public ActionResult Index(string q, int? page)
    {
        var users = _requestServiceClient.GetUsers();
        ...
        ...
        if (Request.IsAjaxRequest())
            return PartialView(userListPaged);
        else
            return View(usersListPaged);
    }

在 relexion 之后,在“创建”的情况下,我认为最好像这样简单地重新加载页面:

            ...
            } else if (data.operation == 'create') {
                // Create >> refresh the page
                location.reload();
            }

不管怎么说,还是要谢谢你。

4

2 回答 2

0

将此代码放入您的局部视图中:

@{
    Layout = null;
}

此代码表示您不需要此页面的主视图。

于 2012-04-08T09:21:15.307 回答
0

如果您的列表不是太长,我建议在每个 ajax 请求中发回完整列表,无论是更新、创建还是删除。

因此,您可以删除数据操作检查(如果有一天您更改列的顺序,您的 :eq(0) 内容将失败),只需将 ajax 请求的结果放在您的#userlist div 中。

编辑

但是要解决您的创建问题:

只需在 Create 操作中替换这一行:

return RedirectToAction("Index");

用这条线:

return PartialView("Index", _requestServiceClient.GetUsers());

它应该只返回新列表。

编辑2

好的,您的 Index.cshtml 似乎具有完整的布局,而不仅仅是我想的列表。所以你必须先这样做:

  1. 仅移动在单独的视图中构建列表所需的 HTML 代码,_List.cshtml例如将其命名
  2. 在您的 Index.cshtml 中 HTML 代码所在的@Html.Partial("_List")位置
  3. 此时,您的索引视图应该看起来与以前相同,但您有单独的列表视图
  4. 将我上面的示例更改为不返回索引,而是返回 _List 部分: return PartialView("_List", _requestServiceClient.GetUsers());

我希望这对你有用。

于 2012-04-07T10:12:55.003 回答