Donc .. J'ai un problème. Je suis sûr que presque tout le monde qui a essayé MVC l'a eu. Néanmoins, je n'ai pas réussi à googler une solution ou à en penser une pour moi-même.Rebobinage d'une liste de zones de texte dans ASP MVC2 VS2010 Beta2 après la publication
Le problème est le suivant: J'ai une liste de zones de texte que je voudrais éditer en une seule fois, et j'aimerais aussi ajouter de nouveaux éléments à ma liste. Toutefois, la liaison de texte échoue après la première publication.
J'ai donc fait un petit exemple pour illustrer le problème:
<% using (Html.BeginForm()) {%>
<fieldset>
<legend>Fields</legend>
<% foreach(string s in Model) { %>
<p>
<%= Html.TextBox("list",s) %>
</p>
<% } %>
<p>
<%= Html.TextBox("newstr") %>
</p>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
Le code du contrôleur:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Edit()
{
return View(new List<string>() { "aa", "bb", "cc" });
}
// Remove empty strings and add the new one
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(List<string> list, string newstr)
{
List<string> res = list.Where(s => !string.IsNullOrWhiteSpace(s)).ToList();
if (!string.IsNullOrWhiteSpace(newstr))
res.Add(newstr);
return View(res);
}
Ainsi, le premier GET je retourne les 3 cordes aa, bb et cc , et obtenir 3 avec leur texte textboxes dans, ainsi que pour en textbox vide de nouvelles chaînes, comme ceci:
aa
bb
cc
Empty.
maintenant, si j'efface la chaîne bb et ajoute "dd" dans la zone de texte vide, j'obtiens une liste de retour de "aa", "", "cc" et "dd" dans newstr. Cela retourne une nouvelle liste de "aa", "cc", "dd" qui est ce que je m'attendrais à voir dans mes cases à cocher. Au lieu de cela, je reçois:
aa
aa
aa
dd (expected empty)
donc .. Il y a quelque chose de fondamental, je n'ai pas :) Pourquoi faut-il ignorer mon nouveau modèle de données et utiliser certains des vieux et pas tous?
Je suppose que c'est une sorte de viewstate restante de asp.net, alors comment l'éteindre? Je veux vraiment que la page Web sans état soit annoncée.
Oui, ça marche.Le fait l'affaire. Voilà pour htmlhelpers, au moins pour l'instant. Et tout est une option tant que cela fonctionne. Merci à vous deux :) –