mvc4 ajax更新同一页面
我在页面上有一个用户列表,当我点击一个标签(easytabs)时,它们会在ajax事件期间加载。 然后我将ajax加载一个创建新用户局部视图到同一个选项卡。 然后我使用此表单创建一个新用户,但我不知道如何使用新的用户列表(包括新创建的用户)重新加载第一个部分视图。
使用HTML列表加载选项卡面板:
控制器:
[HttpGet] public PartialViewResult tabsUsers() { return PartialView("UsersPartial", userManager.GetUsers()); }
UsersPartial View
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable>" %>
model.UserName) %> model.FirstName) %> model.LastName) %> model.Email) %> Actions item.UserName) %> item.FirstName) %> item.LastName) %> item.Email) %> | |
这很好用,每次单击选项卡时,数据都会按预期重新加载。
现在,
在UsersPartial视图中,我有另一个Ajax Actionlink,它将另一个局部视图加载到这个局部视图中,以创建一个新用户:
来自UsersPartial View的HTML Ajax Actionlink:
这会在UsersPartial视图中加载以下CreateUserView视图:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> <script src=""> <script src=""> <script src=""> $(function () { $('form').submit(function () { if ($(this).valid()) { $.ajax({ url: this.action, type: this.method, data: $(this).serialize(), success: function (result) { $('#result').html(result); } }); } return false; }); });
最后,在控制器CreateUserPartial Controller代码中调用CreateUser的代码:
[HttpPost] public ActionResult Create(AccountUser user) { if (ModelState.IsValid) { try { user.Password = user.Password.Encrypt(); userManager.AddUser(user); } catch (DbEntityValidationException dbex) { foreach (var validationErrors in dbex.EntityValidationErrors) { foreach (var validationError in validationErrors.ValidationErrors) { ModelState.AddModelError(validationError.PropertyName, validationError.ErrorMessage); } } } catch (DbUpdateException dbuex) { if (dbuex.InnerException != null) if (dbuex.InnerException.InnerException != null) if (dbuex.InnerException.InnerException.Message.Contains("Cannot insert duplicate key row in object")) return Content("User already exists!", "text/html"); else ModelState.AddModelError("", "An unknown error occured when creating the user."); } catch (Exception) { ModelState.AddModelError("", "An unknown error occured when creating the user."); } } return Content("User created!", "text/html"); }
这一切都有效…当用户创建时,它表示用户已创建! 正如所料。
现在我的问题是,如何使用新用户在UsersPartial视图中重新加载列表? 我无法弄清楚这一部分。 我有一种感觉它与jQuery ajax成功方法有关,但我不知道如何重新加载用户列表,包括这个新创建的用户。
有任何想法吗?
谢谢!
请不要回复表格。 而不是那个调用ajax调用
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> <% using (Html.BeginForm()) <%: Ajax.BeginForm("Create",new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "ManageUsersPartial", InsertionMode = InsertionMode.Replace }, htmlAttributes: new { data_target = "#tabs-users" }) { %> <%: Html.ValidationSummary(true, "Could not create new user.") %> <% } %> <%: Html.ActionLink("Back to List", "Index") %>
然后方法应返回paratail视图而不是Content Type
public ActionResult Create(AccountUser user) { if (ModelState.IsValid) { try { user.Password = user.Password.Encrypt(); userManager.AddUser(user); } catch (DbEntityValidationException dbex) { foreach (var validationErrors in dbex.EntityValidationErrors) { foreach (var validationError in validationErrors.ValidationErrors) { ModelState.AddModelError(validationError.PropertyName, validationError.ErrorMessage); } } return PartialView("CreateUserPartial", user); } catch (DbUpdateException dbuex) { if (dbuex.InnerException != null) if (dbuex.InnerException.InnerException != null) if (dbuex.InnerException.InnerException.Message.Contains("Cannot insert duplicate key row in object")) return Content("User already exists!", "text/html"); else ModelState.AddModelError("", "An unknown error occured when creating the user."); return PartialView("CreateUserPartial", user); } catch (Exception) { ModelState.AddModelError("", "An unknown error occured when creating the user."); return PartialView("CreateUserPartial", user); } return PartialView("UsersPartial", userManager.GetUsers()); } return PartialView("UsersPartial", userManager.GetUsers()); }
您必须在创建后返回新列表。 代替:
return Content("User created!", "text/html");
你应该做:
return PartialView("UsersPartial", userManager.GetUsers());
编辑:你的部分想要一个IEnumerable
用户。 如果您需要消息,请通过ViewBag
发送。