2015-07-24 5 views
6

Ho bisogno del tuo aiuto. Sto usando AjaxBeginform per inviare una domanda in un piccolo campo di testo. Posso inviare la domanda, e posta bene al db, tuttavia la domanda non viene mai chiarita. Sto usando Ajax perché non voglio che l'intera pagina sia pubblicata. Ho provato a usare this.rest(); ma quello funziona in IE ma non funzionerà in Firefox e in Chrome. Ho provato $ ('# domanda'). Reset(); Ma non funziona ancora. Sono sicuro che è qualcosa che sto facendo in modo errato.Utilizzando Ajax, la casella di testo non è deselezionata per l'invio in MVC

Ecco il mio codice qui sotto. Grazie per l'aiuto.

Questo è il mio script nella parte superiore della pagina:

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

Ecco l'AjaxBeginForm insieme al testo

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

      } 

Qui è la mia funzione per OnSuccess

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

Ecco il mio controller

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

Ora, come ho detto prima, ho provato questo, e sarà chiaro in IE ma non int Firefox o Chrome. Quindi quando invio il modulo il pop up ritorna con La tua domanda è stata inviata, mentre il popup è visibile, la domanda cambia in vero e poi fai clic su OK nella finestra popup, la casella di testo viene cancellata in IE:

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

Se qualcuno può dirmi quello che sto facendo in modo errato, sarebbe molto apprezzato. Grazie.

risposta

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

    this.reset(); 

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

questionTxt non domanda

+0

L'ho modificato da domanda a domandaTesto e la domanda scompare dalla casella di testo, ma appare la parola "Vero". – Carla

+0

intendi "vero" invece la domanda? proviene sicuramente da 'this.reset();' – 3pic

+0

forse prova 'function OnSuccess() { alert (" La tua domanda è stata inviata. "); $ ('# questionTxt'). Val (''); this.reset(); $ ('# QuestionTxt') val (''); // Modificato } 'Ho modificato la mia risposta. Si prega di rileggerlo – 3pic

2

Lascia la tua forma un id e quindi provare resettarlo:

@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 

Oppure, se si dispone di un solo modulo a pagina, quindi anche questo sarà funziona come questo funziona solo per la prima forma:

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