Plus d'un Http.RenderAction () dans une seule vue
-
05-07-2019 - |
Question
Comme nous le savons tous, RenderAction()
fait partie de:
- Asp.net MVC 1 Futures ou
- Asp.net MVC 2 Beta 2
et nous permet de rendre le résultat de l'action dans une autre vue ou une vue partielle.
Description
- Vous disposez d'une vue avec plusieurs vues partielles affichées à l'aide de
<form>
helper. - Au moins deux vues partielles donnent un
Html.BeginForm()
probablement en utilisantform
cette publication dans la vue originale. - La publication n'est pas effectuée via un appel Ajax
- Les données de publication sont validées sur le formulaire POST.
Problème
Lorsque l'un des formulaires est envoyé, l'autre est invalide .
Quelqu'un at-il utilisé ce modèle et l'a-t-il résolu? Nous devrions en quelque sorte savoir quelle HttpVerb.Get
publication a été postée et seul celui-ci doit valider ses données POST. D’autres doivent ignorer la validation ou effectuer un <=> traitement régulier des actions.
La solution
Avoir un champ caché dans le formulaire pour indiquer lequel. Vous pouvez également faire passer un préfixe au partiel et l'ajouter à chaque élément du formulaire.
À propos des préfixes. La première consiste à avoir deux propriétés, appelées Html.RenderPartial (& Quotielle & Quot ;, Model.Data1 / 2.WithPrefix (& Quot; data1 & Quot;)).
public class FormModel
{
public string Prefix { get; set; }
}
public class FormData
{
public FormModel Data1 { get; set; }
public FormModel Data2 { get; set; }
}
public ActionResult HandlePost(FormData data)
{
if (data.Data1 != null) {} else {}
}
La deuxième manière est la même mais utilise deux paramètres d'action.
public ActionResult HandlePost(FormModel data1, FormModel data2)
{
if (data1 != null) {} else {}
}
Dans la vue partielle que vous faites
<%= Html.TextBox(Model.Prefix + ".FormModelField", Model.FormModelField) %>
c’est-à-dire que vous définissez le nom du champ avec le préfixe transmis dans le modèle.
Bien sûr, vous pouvez modifier cela en détail.