tutorial - cours asp.net c#




Comment redirection vers Action dans ASP.NET MVC sans perte de données de demande (4)

Il existe un autre moyen d'éviter les tempdata. Le motif qui me plaît implique la création d’une action pour le rendu original et le rendu de la forme invalide. Ca fait plutot comme ca:

var form = new FooForm();

if (request.UrlReferrer == request.Url)
{
     // Fill form with previous request's data
}

if (Request.IsPost())
{
     if (!form.IsValid)
     {
         ViewData["ValidationErrors"] = ...
     } else {
         // update model
         model.something = foo.something;
         // handoff to post update action
         return RedirectToAction("ModelUpdated", ... etc);
     }
}

// By default render 1 view until form is a valid post
ViewData["Form"] = form;
return View();

C'est le modèle plus ou moins. Un petit pseudoy Avec cela, vous pouvez créer une vue pour gérer le rendu du formulaire, afficher à nouveau les valeurs (car le formulaire sera rempli avec les valeurs précédentes) et afficher les messages d'erreur.

Lors de la comptabilisation de cette action, si elle est valide, elle transfère le contrôle sur une autre action.

J'essaie de rendre ce modèle facile dans le cadre de validation .net à mesure que nous développons le support pour MVC.

En utilisant ASP.NET MVC, il existe des situations (telles que la soumission de formulaire) qui peuvent nécessiter un RedirectToAction .

Une telle situation survient lorsque vous rencontrez des erreurs de validation après la soumission d'un formulaire et que vous devez rediriger le travail vers le formulaire, mais que vous souhaitez que l'URL reflète l'adresse du formulaire et non la page d'action à laquelle il est soumis.

Comme je demande que le formulaire contienne les données POST ed d'origine, pour des raisons de commodité ainsi que pour la validation, comment puis-je transmettre les données par le biais de RedirectToAction() ? Si j'utilise le paramètre viewData, mes paramètres POST seront modifiés en paramètres GET .


Jetez un coup d'œil à MVCContrib , vous pouvez le faire:

using MvcContrib.Filters;

[ModelStateToTempData]
public class MyController : Controller {
    //
    ...
}

N'oubliez pas que TempData stocke la collection de formulaires en session. Si vous n'aimez pas ce comportement, vous pouvez implémenter la nouvelle interface ITempDataProvider et utiliser un autre mécanisme pour stocker les données temporaires. Je ne ferais cela que si vous savez pertinemment (via la mesure et le profilage) que l'utilisation de l'état de session vous fait mal.


Si vous souhaitez transmettre des données à l'action redirigée, vous pouvez utiliser la méthode suivante:

return RedirectToAction("ModelUpdated", new {id = 1});
// The definition of the action method like  public ActionResult ModelUpdated(int id);




asp.net-mvc