我有一个名为 Index.cshtml 的视图,其中包含一个用户表(创建/编辑/更新功能)。
当点击按钮(创建/编辑/更新)时,我有一个jQuery对话框。接下来我使用像这样的ajax帖子:
对于创建部分,我遇到了一个问题:我希望“只是”显示我的视图,但我在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之后,在'create'的情况下,或许在我看来更好地重新加载这样的页面:
...
} else if (data.operation == 'create') {
// Create >> refresh the page
location.reload();
}
非常感谢。
答案 0 :(得分:0)
如果您的列表不是太长,我建议在每个ajax请求中发回完整列表,无论是更新,创建还是删除。
所以你可以删除你的数据操作检查(你的:eq(0)的东西如果你有一天改变列的顺序就会失败)并简单地将ajax请求的结果放在你的#userlist div中。
修改强>
但是要解决你的创建问题:
只需在此行的创建操作中替换:
return RedirectToAction("Index");
这一行:
return PartialView("Index", _requestServiceClient.GetUsers());
它应该只返回新列表。
<强> EDIT2 强>
好的,你的Index.cshtml似乎有完整的布局,而不仅仅是我想的列表。所以你必须先做到这一点:
_List.cshtml
@Html.Partial("_List")
的地方return PartialView("_List", _requestServiceClient.GetUsers());
我希望这适合你。
答案 1 :(得分:0)
将此代码放入部分视图中:
@{
Layout = null;
}
此代码表示您不需要此页面的主视图。