2017-01-06 3 views
0

Bonjour, j'ai deux vues partielles dans une seule page asp .net mvc. Lorsque je soumets des entrées en utilisant l'une des vues partielle 2 entrées ont été enregistrées dans la base de données. Si je désactive une page de vue partielle fonctionne très bien. S'il vous plaît aider.Problèmes d'entrée en double lors de l'utilisation de plusieurs vues partielles dans une page unique

Mes vues partielles ressemblent à ceci:

@using (Ajax.BeginForm("Create", "EnquiryForm", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "divEnquiryFormMessage", LoadingElementId = "imgLoadingEnquiryForm" })) 
{ 
    @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
    @Html.AntiForgeryToken() 
    <div id="divEnquiryFormMessage"> 
    </div> 
    <div class="form-group"> 
     @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control", @placeholder = "Name" } }) 
     @Html.ValidationMessageFor(model => model.Name, "", new { @class = "col-sm-12 text-danger" }) 
    </div> 
    <div class="form-group"> 
     @Html.EditorFor(model => model.ContactNumber, new { htmlAttributes = new { @class = "form-control", @placeholder = "Contact Number" } }) 
     @Html.ValidationMessageFor(model => model.ContactNumber, "", new { @class = "col-sm-12 text-danger" }) 
    </div> 
    <div class="form-group"> 
     @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control", @placeholder = "Email" } }) 
     @Html.ValidationMessageFor(model => model.Email, "", new { @class = "col-sm-12 text-danger" }) 
    </div> 
    <div class="form-group"> 
     @Html.TextAreaFor(model => model.Comments, new { htmlAttributes = new { @class = "form-control", @placeholder = "Comments" } }) 
     @Html.ValidationMessageFor(model => model.Comments, "", new { @class = "col-sm-12 text-danger" }) 
    </div> 

    <button type="submit" class="submit_btn">Submit</button> 

<img style="display:none;" src="~/Content/Images/LoadingImage.gif" id="imgLoadingEnquiryForm" /> 

} 
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script> 

Deuxième vue partielle:

@using (Ajax.BeginForm("Create", "MailingList", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "divMessage", LoadingElementId = "imgLoading" })) 
{ 
    @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
    @Html.AntiForgeryToken() 
    <div id="divMessage"> 
    </div> 
     <div class="form-group"> 
      @Html.EditorFor(model => model.FirstName, new { htmlAttributes = new { @class = "form-control", @placeholder = "First Name" } }) 
      @Html.ValidationMessageFor(model => model.FirstName, "", new { @class = "col-sm-12 text-danger" }) 
     </div> 
     <div class="form-group"> 
      @Html.EditorFor(model => model.LastName, new { htmlAttributes = new { @class = "form-control", @placeholder = "Last Name" } }) 
      @Html.ValidationMessageFor(model => model.LastName, "", new { @class = "col-sm-12 text-danger" }) 
     </div> 
     <div class="form-group"> 
      @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control", @placeholder = "Email" } }) 
      @Html.ValidationMessageFor(model => model.Email, "", new { @class = "col-sm-12 text-danger" }) 
     </div> 
     <div class="form-group"> 
      @Html.EditorFor(model => model.ZipCode, new { htmlAttributes = new { @class = "form-control", @placeholder = "Zip Code" } }) 
      @Html.ValidationMessageFor(model => model.ZipCode, "", new { @class = "col-sm-12 text-danger" }) 
     </div> 
     <button type="submit" class="submit_btn">Submit</button><img style="display:none;" src="~/Content/Images/LoadingImage.gif" id="imgLoading" /> 

} 
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script> 

Les deux vues partielles frappent différents contrôleurs et méthode encore il y a étrange situation. Je pense que plusieurs boutons "soumettre" posent problème, mais je ne sais pas comment résoudre ce problème.

Autre problème: après l'enregistrement du contenu que je veux vider les contrôles d'entrée dans mon vue partielle, mais il est également ne fonctionne pas. J'ai essayé ModelState.Clear()

Mon contrôleur:

[HttpPost] 
     [ValidateAntiForgeryToken] 
     public string Create(EnquiryFormViewModel vObj) 
     { 
      System.Threading.Thread.Sleep(1000); 
      if (ModelState.IsValid) 
      { 
       EnquiryForm mObj = new EnquiryForm(); 
       mObj.Name = vObj.Name; 
       mObj.ContactNumber = vObj.ContactNumber; 
       mObj.Email = vObj.Email; 
       mObj.Comments = vObj.Comments; 
       mObj.IsContacted = false; 
       mObj.CreatedOn = DateTime.Now; 
       string status = enquiryFormService.insertEnquiryForm(mObj); 
       ModelState.Clear(); 
       return status; 
      } 
      else 
      { 
       return "<p class=\"bg-danger\">Oops there are some errors on page.</p>"; 
      } 

     } 
+0

je pense que vous avez inclus les bibliothèques ajax dans les deux Vue partielle est pourquoi vos données sauvegardées deux fois lorsque vous avez 2 vue partielle rendu en vue unique –

+0

Il devrait y avoir seulement 1 Ajax-discret dans votre page entière sinon votre contrôleur sera frapper plusieurs fois –

+0

Essayez de définir Layout sur Null dans toutes vos vues partielles. Cela permet d'éviter de charger plusieurs ressources plusieurs fois. Nous avons eu un problème similaire qui a été résolu de cette façon. –

Répondre

0

Il devrait y avoir seulement 1 Ajax-discret dans votre page entière sinon votre contrôleur frappera plusieurs fois

+0

Merci beaucoup. Mon autre problème est: Après la soumission des champs de formulaire ne pas effacer .... Comment effacer les champs de formulaire après avoir soumis ??? –

0

Vous pouvez utiliser un succès méthode après forme ont été soumis comme celui-ci: -

@using (Ajax.BeginForm("Create", "MailingList", new AjaxOptions { onSuccess="ResetForm",HttpMethod = "POST", UpdateTargetId = "divMessage", LoadingElementId = "imgLoading" })) 

et créer un Function ResetForm() intérieur tag <script> et intérieur fonction écriture $('#formID')[0].reset();