asp.net mvc 3-formulaire ajax soumettre et validation

Je suis désolé si cela a déjà été demandé, mais j'ai cherché quelque temps mais tout ce que j'ai trouvé sont des messages plutôt anciens (mvc1, mvc2). J'ai un formulaire que je voudrais soumettre via Ajax.

Ce semble fonctionner mais ne couvre pas la validation côté serveur.

1) je ne suis pas sûr si je devrais utiliser le AjaxHelper.BeginForm ou utiliser des appels jquery ($.ajax)? Qu'est-ce que l'approche préconisée ici?

2) Comment gérer la validation côté client et Côté Serveur? Je suis en espérant que le mvc cadre fournit un mécanisme intégré pour faire face à cela? Il y a quelques validations que je ne fais que Côté Serveur. L'utilisation d'un ValidationSummary fonctionnerait-elle toujours ici?

J'utilise asp.net mvc3 / razor avec validation JavaScript discrète.

Merci!

Edit: (comme demandé par Bobby B ci-dessous). Cela a été ajouté des mois après avoir posé la question car un utilisateur voulait savoir comment utiliser AjaxHelper

C'est le code javascript I utilisé:

<script type="text/javascript">

function ajaxValidate() {
  return $('form').validate().form();
}

function getGbPostSuccess(ajaxContext){
  // .... it is not necessary to do anything here.
}
function showFaliure(ajaxContext){
   // handle failure
}

Extrait HTML:

@using (Ajax.BeginForm("Index", "Home", new AjaxOptions
                        {
                            UpdateTargetId = "form1",
                            InsertionMode = InsertionMode.Replace,
                            OnBegin = "ajaxValidate",
                            OnSuccess = "getGbPostSuccess",
                            OnFailure = "showFaliure"
                        }))
{
21
demandé sur Community 2011-03-05 01:43:34

2 réponses

J'utilise le plugin de formulaire jQuery demalsup depuis un moment à cette fin. Honnêtement, Je ne suis pas familier avec AjaxHelper, mais on dirait que ça va faire ce que vous cherchez. En ce qui concerne la validation côté client et Côté Serveur, cela devrait se produire principalement automatiquement tant que vous utilisez la liaison de modèle et les attributs du système.Espace de noms DataAnnotations.

public class MyModel
{
    [Required(ErrorMessage = "Please enter your name")]
    public String Name { get; set; }

    [Required(ErrorMessage = "Please enter your email")]
    public String Email { get; set; }

    [Required(ErrorMessage = "Please enter a rating")]
    [Range(1, 5, ErrorMessage = "The rating must be between 1 and 5")]
    public Int32 Rating { get; set; }
}

[HttpPost]
public ActionResult Index(MyModel myModel)
{
   if(ModelState.IsValid)
   {
       // good to go, put it in the DB or whatever you need to do
   }
   else 
   {
       return View(model); // return the user back to the page, ModelState errors can be viewed using Html.ValidationSummary() or individual Html.ValidationMessageFor() calls
   }
}

Si vous effectuez votre propre validation côté serveur personnalisée, vous pouvez créer votre propre validation personnalisée attribut de validation en créant un attribut qui implémente ValidationAttribute, ou simplement ajouter des erreurs de validation en appelant ModelState.Erreur.Add() (ou quelque chose autour de là, je n'ai pas de référence à portée de main)

Côté client, MVC génère une validation côté client pour vous en fonction des attributs DataAnnotations de votre modèle.

8
répondu Daniel Schaffer 2011-03-05 00:06:21

MVC.NET 3 a déjà ce hors de la boîte. Assurez-vous simplement D'avoir ClientValidationEnabled activé sur le web.config. Vérifier ce

1
répondu amit_g 2011-03-04 23:11:50