2011-02-07 6 views
3

Je suis nouveau sur MVC et j'essaye de mettre à jour ma page après avoir soumis mon formulaire; mais ça ne marche pas. J'essaye seulement de cacher le formulaire, et montre le contenu d'un div OnSuccess.MVC 3 Razor - Ajax.BeginForm OnSuccess

Mon code est:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('#confirmation').hide(); 
    }); 

    function MessageConfirmation() { 
     $('#confirmation').show('slow'); 
     $('#contactForm').hide('slow'); 
    } 

</script> 

@using (Ajax.BeginForm("Index", new AjaxOptions { OnSuccess = "MessageConfirmation" })) 
{ 
<fieldset id="contactForm"> 
    <legend>Message</legend> 
    <p> 
     @Html.Label("Email", "Email"): @Html.TextBox("Email") 
    </p> 
    <p> 
     @Html.Label("Subject", "Subject"): @Html.TextBox("Subject") 
    </p> 
    <p> 
     @Html.Label("Message", "Message"): @Html.TextArea("Message") 
    </p> 
    <p> 
     <input type="submit" value="Send" /> 
    </p> 
</fieldset> 

<p id="confirmation" onclick="MessageConfirmation()"> 
    Thanks!!! 
</p> 
} 

Toutes les solutions/idées alternatives sont les bienvenus.

Merci d'avance!

Répondre

7

Ne fonctionne pas est une description du problème qui est plus adaptée aux personnes qui ne connaissent pas/ne se soucient pas du fonctionnement de l'ordinateur et non des développeurs de logiciels. Les développeurs de logiciels décrivent généralement précisément le problème qu'ils rencontrent. Ils publient le message d'erreur exact/la trace de pile d'exception qu'ils ont.

Cela dit vous demandez des solutions alternatives, voici la mienne: ne pas utiliser MS Ajax.* helpers, utilisez jquery directement et discrètement, comme celui-ci

<script type="text/javascript"> 
    $(function() { 
     $('#confirmation').hide(); 
     $('form').submit(function() { 
      $('#confirmation').show('slow'); 
      $(this).hide('slow'); 
      return false; 
     }); 
    }); 
</script> 

@using (Html.BeginForm()) 
{ 
    <fieldset id="contactForm"> 
     <legend>Message</legend> 
     <p> 
      @Html.Label("Email", "Email"): 
      @Html.TextBox("Email") 
     </p> 
     <p> 
      @Html.Label("Subject", "Subject"): 
      @Html.TextBox("Subject") 
     </p> 
     <p> 
      @Html.Label("Message", "Message"): 
      @Html.TextArea("Message") 
     </p> 
     <p> 
      <input type="submit" value="Send" /> 
     </p> 
    </fieldset> 
} 

<p id="confirmation"> 
    Thanks!!! 
</p> 

Remarquez comment le paragraphe confirmation a été extériorisée de la forme . Etes-vous sûr d'avoir tous les fichiers js corrects référencés dans votre projet?

+4

Merci pour votre solution. Toutes mes excuses pour le flou du message. Je suis un développeur de logiciels avec un vif intérêt pour Stella Artois. Cependant, la validation de formulaire ne déclenche pas. Comment le client sait-il si la méthode a réussi? – user547043

+0

@Darin Dimitrov - cela vous dérangerait-il de me donner des raisons pour éviter les aides 'MS Ajax. *'? Vos raisons s'appliquent-elles aussi à MVC4? –

+0

@ kyle.stearns, vous avez un meilleur contrôle de la requête AJAX lorsque vous l'écrivez vous-même, et oui, mes raisons sont également applicables dans MVC4. –

3

Dans MVC3, ils se sont éloignés des fichiers MS Ajax. Si je me souviens bien - le javascript discret devrait être activé par défaut, vous devriez donc faire référence aux fichiers suivants: jquery.js, jquery.validate.js, jquery.valudate.unobtrusive.js, jquery.unobtrusive-ajax.js

Avec ces références de fichiers - vous devriez aller bien.

P.S. Il y a un très bon billet de Brad Wilson expliquant les détails de ajax discret dans MVC3, et comment tout cela fonctionne. Check it out ici: http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-ajax.html

+0

Merci Artion, J'ai maintenant inclus les fichiers js, et le formulaire est en cours de validation, mais comment le côté client sait-il si la méthode est réussie? – user547043

+0

Que voulez-vous dire? C'est une question assez vague =/ –

+0

Si vous avez un formulaire ajax valide, je pense habituellement que vous retourneriez le retour partiel du formulaire, de sorte que les messages de validation seront montrés sur le résultat du formulaire, ou un succès partiel, si le message était réussi. Au moins, c'est comme ça que je le ferais –

0

Assurez-vous que vous pouvez obtenir à votre méthode d'action. Ajoutez également un gestionnaire d'échec et vérifiez s'il renvoie également un échec. Les fonctionnalités discrètes doivent également être activées, et vous devez ajouter dans les scripts AJAX discrets MVC pour MVC 3 et rasoir.

HTH.

0

Vous pouvez utiliser JQuery déclencheur

$("#confirmation").trigger('click'); 

Parce que vous avez une méthode onclick sur la div