J'ai un problème qui apparaît dans un formulaire que j'essaie de poster. Dans le cas où le formulaire n'est pas validé, j'emprunte la voie standard en appelant ModelState.AddModelError()
puis de renvoyer un résultat d'affichage.
Le problème est que les aides HTML.* sont censées reprendre la valeur affichée lors du rendu et je remarque que mes champs de texte le font UNIQUEMENT si je les inclus dans la liste des paramètres de l'action de retour, ce qui ne devrait pas être nécessaire étant donné que certains formulaires ont beaucoup trop de champs pour vouloir les lister tous comme paramètres.
Mon code d'action est en gros :
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditDataDefinition(long? id, string name)
{
var dataDefinition = ...
// do some validation stuff
if (!ModelState.IsValid)
{
// manually set checkbox fields via ViewData seeing as this STILL doesn't work in MC 1.0 :P
// ...
return View(dataDefinition);
}
}
Maintenant, dataDefinition (qui est une entité LINQ to SQL) a un champ MinVolume est traitée dans la vue par cette ligne :
Minimum: <%= Html.TextBox("MinVolume", null, new { size = 5 })%>
Pourtant, lorsque la vue est rendue après l'échec de la validation du ModelState, la valeur saisie dans la page originale que nous avons affichée n'est pas préservée À MOINS que je ne l'inclue comme paramètre dans la méthode de retour. Littéralement, je peux "résoudre le problème" en faisant ceci :
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult EditDataDefinition(long? id, string name, string minVolume)
Pour une raison quelconque, cela forcera la valeur du champ à être préservée. Cela me semble stupide car mon formulaire contient bien plus de valeurs que ce seul champ et je ne devrais pas avoir à ajouter un paramètre pour ce seul champ.
Des idées ?