2015-07-24 2 views
6

J'ai besoin de votre aide. J'utilise AjaxBeginform pour soumettre une question dans un petit champ de texte. Je peux soumettre la question, et il affiche bien à la DB, mais la question ne s'efface jamais. J'utilise Ajax parce que je ne veux pas que toute la page soit publiée. J'ai essayé d'utiliser this.rest(); mais cela fonctionne dans IE mais cela ne fonctionnera pas dans Firefox et Chrome. J'ai essayé $ ('# question'). Reset(); Mais ça ne marche toujours pas. Je suis sûr que c'est quelque chose que je fais mal.Utilisation de Ajax, la zone de texte ne s'efface pas sur soumettre dans MVC

Voici mon code ci-dessous. Merci de votre aide.

Voici mes scripts en haut de la page:

<script type="text/javascript" src="~/Scripts/jquery-migrate- 1.2.1.min.js"></script> 

Voici le AjaxBeginForm ainsi que la zone de texte

 @using (Ajax.BeginForm("SendQuestion", new { PresId = Model.PresentationID, catalogId = ViewBag.CatalogId }, new AjaxOptions 
     { 
      HttpMethod = "Post", 
      UpdateTargetId = "questionTxt", 
      OnBegin = "OnBegin", 
      OnSuccess = "OnSuccess", 
      OnFailure = "OnFailure" 

     })) 
      { 

       <fieldset id="question"> 
        <p> 
         <textarea id="questionTxt" style="font-size:12px" cols="20" rows="6" name="questionTxt" onclick="javascript:removeTextAreaWhiteSpace(this);"></textarea> 
        </p> 


        <button id="question-btn" type="submit">Submit</button> 
       </fieldset> 

      } 

Voici ma fonction pour OnSuccess

function OnSuccess() { 
    alert("Your question has been submitted."); 
    $('#question').val(''); 
} 

Voici mon contrôleur

public bool SendQuestion(string questionTxt, long PresId, long catalogId) 
    { 
     try 
     { 
      var db = new ODTEntities(); 
      var pres = db.Presentations.FirstOrDefault(i => i.PresentationID == PresId); 
      var subject = db.Catalogs.FirstOrDefault(i => i.CatalogID == catalogId).CatalogCode + " - " + pres.Title + " - " + pres.Presenter.PresenterName; 
      Utils.AddQuestionToDB(db, PresId, catalogId, Utils.GetAttendeeId(), questionTxt); 
      string body = "This question : " + Environment.NewLine + questionTxt + Environment.NewLine + " was sent by " + 
          User.Identity.Name; 
      var catalog = db.Catalogs.FirstOrDefault(i => i.CatalogID == catalogId); 
      if (!string.IsNullOrEmpty(catalog.QuestionsEmail)) 
       Helper.SendMail(body, subject, catalog.QuestionsEmail, ""); 
      else 
       Helper.SendMail(body, subject); 
     } 
     catch (Exception) 
     { 
      return false; 
     } 
     return true; 
    } 

Maintenant, comme je l'ai dit plus tôt, je l'ai essayé celui-ci, et il effacera dans IE mais pas int Firefox ou Chrome. Donc, quand je soumets le formulaire, la pop up revient avec Votre question a été soumise, tandis que la popup est visible, la question devient true et puis vous cliquez sur OK dans la fenêtre contextuelle, la zone de texte est effacée dans IE:

 function OnSuccess() { 
    alert("Your question has been submitted."); 
    $('#question').val(''); 
    this.reset(); 
} 

Si quelqu'un peut me dire ce que je fais de façon incorrecte, ce serait grandement apprécié. Je vous remercie.

Répondre

2
function OnSuccess() { 
    alert("Your question has been submitted."); 

    this.reset(); 

    $('#questionTxt').val(''); //Modified, put it AFTER reset() 
} 

questionTxt pas question

+0

Je l'ai changé de question en questionTxt, et la question disparaît de la zone de texte mais le mot «vrai» apparaît. – Carla

+0

vous voulez dire "vrai" à la place de la question? il vient certainement de 'this.reset();' – 3pic

+0

peut-être essayer 'function OnSuccess() { alert (" Votre question a été soumise. "); $ ('# questionTxt'). Val (''); this.reset(); $ ('# questionTxt'). val (''); // Modifié } 'Je modifie ma réponse. S'il vous plaît relire – 3pic

2

Donnez votre formulaire un identifiant et puis essayez de le réinitialiser:

@using (Ajax.BeginForm("SendQuestion", new { PresId = Model.PresentationID, catalogId = ViewBag.CatalogId }, new AjaxOptions 
    { 
     HttpMethod = "Post", 
     UpdateTargetId = "questionTxt", 
     OnBegin = "OnBegin", 
     OnSuccess = "OnSuccess", 
     OnFailure = "OnFailure" 

    },new {id="formid"})) 
    } 

$('#formid').reset(); // BY JQUERY 
document.getElementById("formid").reset(); // BY PURE JAVASCRIPT 

Ou si vous avez un seul formulaire à la page, alors ce sera aussi travailler comme cela fonctionne pour la première forme seulement:

$('form:first').reset();