我在MVC应用程序中有此标记。
<div id="ingredientlistdiv"> <% Recipe recipe = (Recipe)Model; %> <% Html.RenderPartial("IngredientsListControl", recipe.Ingredients); %> </div> <div id="ingrediententrydiv" align="left"> <% using (Ajax.BeginForm("Add Ingredient", "Recipes/UpdateStep2", new AjaxOptions { UpdateTargetId = "ingredientlistdiv" })) { %> <p> <label for="Units">Units:</label><br /> <%= Html.TextBox("Units", 0)%> <%= Html.ValidationMessage("Units", "*")%> </p> <p> <label for="Measure">Measure:</label><br /> <%= Html.TextBox("Measure")%> <%= Html.ValidationMessage("Measure", "*")%> </p> <p> <label for="IngredientName">Ingredient Name:</label><br /> <%= Html.TextBox("IngredientName")%> <%= Html.ValidationMessage("IngredientName", "*")%> </p> <p><a href="javascript:document.forms[0].submit()">Save Ingredient</a></p> <%= Html.Hidden("RecipeID", recipe.RecipeID.ToString())%> <% } %> </div>
当它运行时,IngredientsListControl.ascx在浏览器中显示为新页面,并且不会更新Ingredientlistdiv。
这是我的控制器动作
[AcceptVerbs(HttpVerbs.Post)] public ActionResult UpdateStep2(FormCollection form) { var factory = SessionFactoryCreator.Create(); using (var session = factory.OpenSession()) { Recipe recipe = GetRecipe(session, Convert.ToInt32(form["RecipeID"])); Ingredient ingredient = new Ingredient(); ingredient.UpdateFromForm(form); ingredient.Validate(ViewData); if (ViewData.ModelState.Count == 0) { recipe.Ingredients.Add(ingredient); session.Save(recipe); return PartialView("IngredientsListControl", recipe.Ingredients); } return Content("Error"); } }
我在这条线上做对了吗?
return PartialView("IngredientsListControl", recipe.Ingredients);
这就是我将控件呈现到div中的方式,以便它不会加载新页面。
马尔科姆
使用此功能时:
<a href="javascript:document.forms[0].submit()">
…您应该注意,这与
<input type="submit" />
它不会引发onsubmit事件,并且不会调用MVC的AJAX事件处理程序。
要确认这是问题,请添加
在表单中进行尝试。
最后,只需从链接中调用onsubmit()
<a href="#" onclick="document.forms[0].onsubmit()">