MVC - Utilisation d'Ajax pour afficher une vue partielle
J'ai cette balise dans une application 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>
Lorsque cela va à l'IngredientsListControl.ascx displayas une nouvelle page
dans le navigateur et ne pas mettre à jour le ingredientlistdiv.
C'est mon contrôleur de l'action
[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");
}
}
Suis-je en train de faire la bonne chose sur cette ligne?
return PartialView("IngredientsListControl", recipe.Ingredients);
Est que la façon dont j'ai rendu le contrôle dans le div de sorte qu'il ne
pas de chargement de la nouvelle page.???
Malcolm
source d'informationauteur Malcolm
Vous devez vous connecter pour publier un commentaire.
Lorsque vous utilisez ce:
...vous devez être conscient que ce n'est pas le même que
Qu'il ne soulève pas l'événement onsubmit, et MVC, AJAX ce gestionnaire n'est pas appelé.
Pour confirmer cette question, ajouter
à l'intérieur de la forme et de l'essayer.
Enfin, il suffit d'appeler onsubmit() à partir de votre lien
Pourrait être intéressant de vous assurer que vous avez correctement référencé le ajaxmvc et de scripts jquery dans votre page (page principale). Si celles-ci sont incorrectes, une nouvelle page sera affiché à la place de la sortie correcte de la cible div.
RenderPartial prend un nom d'action, et non pas le nom de l'utilisateur, afin de remplacer "IngredientsListControl" avec "UpdateStep2", votre nom d'action.