Je travaille actuellement avec MVC 1.0 et n'ai jamais travaillé avec AJAX auparavant et n'ai qu'une expérience limitée (commencé il y a un peu plus d'une semaine) avec ASP.Net MVC . J'essaye d'installer une table (qui est construite/est dans une vue partielle) qui est remplie avec l'information d'une base de données qui permet à un utilisateur d'ajouter rapidement des enregistrements pr remove dans ou depuis la base de données directement depuis la table. J'essaie d'utiliser AJAX pour y arriver car il y a beaucoup d'autres informations sur le reste de la page que je ne veux pas avoir à recharger. Voici un modèle rapide.MVC Ajax ne charge pas Vue partielle dans div, chargement nouvelle page
row1: (zone de texte) Ajouter
row2: Name1 Retirer
row3: Nom2 Retirer
Ainsi, lorsqu'un utilisateur veut, ils peuvent entrer un nom dans la (zone de texte) touche Ajouter et une action dans le contrôleur ajoutera le nom entré dans la base de données et rechargera la vue partielle avec les informations les plus à jour. Jusqu'à présent, j'ai pu appeler la méthode d'action et ajouter l'enregistrement dans la base de données. Le problème est qu'il ne recharge pas JUST la vue partielle. Il charge à la place la vue partielle en tant que nouvelle page entière et son contenu est le seul qui s'affiche. (Au lieu de rester à/Projet/Détails/5, la page se charge/Projet/MembersDisplay)
Dans ma page principale je:
<script src="<%= Links.Scripts.jquery_1_3_2_min_js %>" type="text/javascript"></script>
<script src="<%= Links.Scripts.MicrosoftAjax_js %>" type="text/javascript"></script>
<script src="<%= Links.Scripts.MicrosoftMvcAjax_js %>" type="text/javascript"></script>
Dans le contrôleur je:
[AcceptVerbs(HttpVerbs.Post)]
public virtual ActionResult AddMember(FormCollection form)
{
MemberRepository repo = new MemberRepository();
Member m = new Member();
m.Id = Convert.ToInt32(form["Id"]);
m.Name = form["name"];
try{
repo.addMember(m);
repo.save();
}
catch{
return View();
}
// Make a new IList of All Members in this current
//IList<Member> mems = (new PRDataContext()).Members_GetMembersById(m.Id).ToList<Member>();
return View("MembersDisplay", members);
}
la vue partielle est
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<List<Application.Models.Member>>" %>
<script src="/Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoffMvcAjax.js" type="text/javascript"></script>
<table>
<% if (Model.Count() > 0) { %>
<% foreach (var p in ViewData.Model) { %>
<tr>
<td><%= Html.Encode(p.Name) %></td>
<td><%= Ajax.ActionLink("Delete", "AjaxDelete", new { p.Id, p.Name }, new AjaxOptions { Confirm = "Delete?", HttpMethod = "AjaxDelete", UpdateTargetId = "results" })%></td>
</tr>
<% } %>
<% } else { %>
<tr>
<td><b>There are no Members.</b></td>
</tr>
<% } %>
</table>
Dans le contrôleur, j'ai essayé d'ajouter si (Request.IsA jaxRequest() == true) la branche n'a jamais été exécutée. Je ne suis pas sûr si ajax ne charge pas, ou ce que je fais mal.
EDIT - code manquant Ajout
Voici la partie de détails qui utilise la vue partielle:
<table>
<% Ajax.BeginForm("AddMember", "Project", new AjaxOptions { UpdateTargetId = "results", InsertionMode=InsertionMode.Replace}) { %>
<tr>
<td align="left" colspan="2" style="background-color:#93B6E0;"><font style="color:#fff;"><b>Members</b></font></td>
</tr>
<tr>
<td width="80%">
<input type="hidden" name="prjId" value="<%= Html.Encode(Model.Id) %>" /><input type="text" name="name" style="width:120px;" />
</td>
<td width="20%">
<input type="submit" value="Add" />
</td>
</tr>
<% } %>
<tr>
<td colspan="2">
<div id="results"><% Html.RenderPartial(MVC.Members.Views.MembersDisplay, Model.Members.ToList<Member>()); %></div>
</td>
</tr>
Il semble que vous exécutiez une publication au lieu d'une requête POST ajax. Pouvez-vous partager le code qui appelle votre action de contrôleur? – Tahbaza
Voir la question mise à jour. – Dirk
L'a corrigé. Entre autres, les liens vers les fichiers .js étaient erronés (merci à FireBug de le signaler). – Dirk