2011-03-04 3 views
21

Je suis désolé si cela a déjà été demandé, mais je cherchais depuis quelque temps mais tout ce que j'ai trouvé sont plutôt anciens messages (mvc1, mvc2). J'ai un formulaire que je voudrais soumettre via Ajax.asp.net mvc 3 - ajax formulaire soumettre et validation

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

1) Je ne sais pas si je devrais utiliser le AjaxHelper.BeginForm ou utiliser les appels jquery bruts ($.ajax)? Quelle est l'approche recommandée ici?

2) Comment gérer la validation côté client et côté serveur? J'espère que le cadre mvc fournit un mécanisme intégré pour faire face à cela? Il y a quelques validations que je ne fais que côté serveur. Est-ce que l'utilisation d'un ValidationSummary fonctionnerait toujours ici? J'utilise asp.net mvc3/rasoir avec validation javascript discrète.

Merci!

Modifier: (comme demandé par Bobby B ci-dessous). Cela a été ajouté mois après avoir posé la question en tant qu'utilisateur voulait savoir comment utiliser AjaxHelper

Voici le code javascript je:

<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 
} 

HTML extrait:

@using (Ajax.BeginForm("Index", "Home", new AjaxOptions 
         { 
          UpdateTargetId = "form1", 
          InsertionMode = InsertionMode.Replace, 
          OnBegin = "ajaxValidate", 
          OnSuccess = "getGbPostSuccess", 
          OnFailure = "showFaliure" 
         })) 
{ 

Répondre

8

Je me sers malsup's jQuery form plugin pendant un certain temps à cet effet. Honnêtement, je ne connais pas 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, tout cela devrait se produire automatiquement, tant que vous utilisez la liaison de modèle et les attributs de l'espace de noms System.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 faites votre propre validation côté serveur personnalisé, vous pouvez créer votre propre attribut de validation personnalisé en créant un attribut qui implémente ValidationAttribute, ou tout simplement ajouter des erreurs de validation en appelant ModelState.Errors.Add () (ou quelque chose là-bas, je n'ai pas de référence à portée de main)

Pour le côté client, MVC générera la validation côté client pour vous en fonction des attributs DataAnnotations de votre modèle.

+0

Merci! Je l'ai fonctionné maintenant. J'ai fini par utiliser AjaxHelper. – santiagoIT

+0

Y at-il une chance que vous expliquiez comment vous avez utilisé AjaxHelper? Je suis moi-même confronté au même problème et j'essaie de décider quelle est la meilleure approche à adopter. Merci! –

+0

Je vais ajouter l'exemple de code en tant que modifier à la question. De cette façon, je peux le mettre en forme mieux ;-) – santiagoIT

1

MVC.NET 3 a déjà ce hors de la boîte. Assurez-vous simplement que ClientValidationEnabled est activé dans le fichier web.config. Vérifiez this

+0

J'ai vérifié le lien, mais il explique comment activer la validation côté client. J'ai activé la validation côté client, ce n'est malheureusement pas ma question. – santiagoIT

Questions connexes