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; }); });  
User
model.UserName) %>
model.UserName) %> model.UserName) %>
model.FirstName) %>
model.FirstName) %> model.FirstName) %>
model.LastName) %>
model.LastName) %> model.LastName) %>
model.Password) %>
model.Password) %> model.Password) %>
model.Email) %>
model.Email) %> model.Email) %>

最后,在控制器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.") %> 
User
<%: Html.LabelFor(model => model.UserName) %>
<%: Html.EditorFor(model => model.UserName) %> <%: Html.ValidationMessageFor(model => model.UserName) %>
<%: Html.LabelFor(model => model.FirstName) %>
<%: Html.EditorFor(model => model.FirstName) %> <%: Html.ValidationMessageFor(model => model.FirstName) %>
<%: Html.LabelFor(model => model.LastName) %>
<%: Html.EditorFor(model => model.LastName) %> <%: Html.ValidationMessageFor(model => model.LastName) %>
<%: Html.LabelFor(model => model.Password) %>
<%: Html.EditorFor(model => model.Password) %> <%: Html.ValidationMessageFor(model => model.Password) %>
<%: Html.LabelFor(model => model.Email) %>
<%: Html.EditorFor(model => model.Email) %> <%: Html.ValidationMessageFor(model => model.Email) %>

<% } %>
<%: 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发送。