2017-07-20 2 views
0

Ich habe datatable Bibliothek zusammen mit zwei Schaltflächen bearbeiten und löschen.Wenn ich das Formular (modale Popup-Bootstrap) abschicken. Es schließt nicht und ich muss es auch manuell schließen Ich muss manuell aktualisieren meine "Datentabelle" zu zeigt meine Manipulationen.Ich habe zwei Probleme.1) modales Popup schließt nicht und 2) datatable wird nicht aktualisiert.Wie modales Popup-Bootstrap zu schließen und Datatable nach Ajax-Aufruf in asp.net mvc zu aktualisieren?

enter image description here @model Dentistry.Areas.ViewModels.UserViewModel

<div class="modal-header"> 
    <button type="button" class="close" data-dismiss="modal" aria-hidden="true"> 
     <span class="glyphicon glyphicon-remove" aria-hidden="true"></span> 
    </button> 
    <h4 class="modal-title custom_align" id="Heading">ویرایش کاربران</h4> 

</div> 
@using (Html.BeginForm("Edit", "Users", FormMethod.Post, new { id = "popupForm" })) 
{ 
    @Html.AntiForgeryToken() 
    if (Model != null && Model.UserId != string.Empty) 
    { 
     <div class="modal-body" id="editModal"> 
      <div class="form-group"> 
       @Html.HiddenFor(a => a.UserId) 
      </div> 
      <div class="form-group"> 
       <label>نام کاربری</label> 
       @Html.TextBoxFor(a => a.UserName, new { @class = "form-control" }) 
       @Html.ValidationMessageFor(a => a.UserName) 
      </div> 
      <div class="form-group"> 
       <label>نام</label> 
       @Html.TextBoxFor(a => a.FirstName, new { @class = "form-control" }) 
       @Html.ValidationMessageFor(a => a.FirstName) 
      </div> 

      <div class="form-group"> 
       <label>نام خانوادگی</label> 
       @Html.TextBoxFor(a => a.LastName, new { @class = "form-control" }) 
       @Html.ValidationMessageFor(a => a.LastName) 
      </div> 
      <div class="form-group"> 
       <label>جنسیت</label> 
       @Html.TextBoxFor(a => a.Gender, new { @class = "form-control" }) 
       @Html.ValidationMessageFor(a => a.Gender) 
      </div> 
      <div class="form-group"> 
       <label>وضعیت</label> 
       @Html.TextBoxFor(a => a.IsActive, new { @class = "form-control" }) 
       @Html.ValidationMessageFor(a => a.IsActive) 
      </div> 

      <div class="form-group"> 
       <label>ایمیل</label> 
       @Html.TextBoxFor(a => a.Email, new { @class = "form-control" }) 
       @Html.ValidationMessageFor(a => a.Email) 
      </div> 
      <div class="form-group"> 
       <label>آدرس</label> 
       @Html.TextBoxFor(a => a.Address, new { @class = "form-control" }) 
       @Html.ValidationMessageFor(a => a.Address) 
      </div> 
      <div class="form-group"> 
       <label>شماره تماس</label> 
       @Html.TextBoxFor(a => a.PhoneNumber, new { @class = "form-control" }) 
       @Html.ValidationMessageFor(a => a.PhoneNumber) 
      </div> 

      @*<a href="#" id="btnSubmit" class="btn btn-success btn-block">ویرایش</a>*@ 
     </div> 
     <div class="modal-footer"> 
      <button type="submit" class="btn btn-success btn-block" >ویرایش</button> 
      @*<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>*@ 
     </div> 
    } 
} 
<script> 
    //$(document).ready(function() { 


     $(function() { 
      $('#popupForm').on('submit', function (e) { 
       e.preventDefault(); 
       alert("hi"); 
       SubmitForm(); 
      }) 
     }); 
     function SubmitForm() { 
      var data = $("#popupForm").serialize(); 
      var url = "/Users/Edit"; 
      var form = $('#popupForm')[0]; 
      var formdata = false; 
      if (window.FormData) { 
       formdata = new FormData(form); 
      } 
      alert(formdata); 
      $.ajax({ 
       type: 'POST', 
       dataType: 'json', 
       url: url, 
       data: formdata ? formdata : data, 
       cache: false, 
       contentType: false, 
       // enctype: 'multipart/form-data', 
       processData: false, 
       success: function (data) { 
        if (data == true) { 
         $('#edit').modal('hide'); 
         window.location.href="/Users/Index"; 
         $("#myDatatable").ajax.reload(); 
        } 
       } 

      }); 
     } 

</script> 

============================ ================

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Edit(UserViewModel user) 
{ 
    bool status=false; 
    if (ModelState.IsValid) 
    { 
     var userQuery=db.User.SingleOrDefault(u => u.Id == user.UserId); 
     if (user.UserId != string.Empty) 
     { 
      userQuery.FirstName = user.FirstName; 
      userQuery.LastName = user.LastName; 
      userQuery.PhoneNumber = user.PhoneNumber; 
      userQuery.UserName = user.UserName; 
      userQuery.Email = user.Email; 
      userQuery.Address = user.Address; 
      userQuery.Gender = Convert.ToBoolean(user.Gender); 
      userQuery.IsActive = Convert.ToBoolean(user.IsActive); 
     } 
     else 
     { 
      User userDB=new User(); 
      userDB = userQuery; 
      db.User.Add(userDB); 
     } 
     // db.Entry(user).State = EntityState.Modified; 
     db.SaveChanges(); 
     status = true; 

    } 
    // return RedirectToAction("Index"); 
    // return View(user); 
    return new JsonResult { Data = new { status = status } }; 
} 
+0

Klingt wie die Ajax-Methode nicht ist Erfolg bringen. Überprüfen Sie die Netzwerkregisterkarte im Browser und sehen Sie. – nurdyguy

+0

@nurdyguy, ja genau, meine Ajax-Methode funktioniert nicht.Ich habe eine Warnung in die Erfolgsfunktion hinzugefügt, die nicht ausgelöst wird. – rayan

+0

Was sagt es in der Registerkarte Netzwerke? Etwas? Nur weil es nicht zum Erfolg kam, heißt das nicht, dass es nicht geschossen hat. Sie sollten immer eine 'error: function() {...}' Methode haben, auch wenn Sie nichts damit machen. – nurdyguy

Antwort

1

Ihre Antwort von MVC ist ein Objekt mit der Eigenschaft success auf es so in Ihren jQuery müssen Sie if(data.success == true) testen werden. Da es sich um einen booleschen Wert handelt, können Sie auch if(data.success) als Abkürzung verwenden.

+0

und auch du brauchst datatable.reload nicht, da du die windows.location änderst –

+1

Ja, das ist ein guter Punkt. Entweder die Tabelle neu laden _oder_ die Seite neu laden, muss nicht beides tun. Obwohl, wenn ich von der Seite weg navigieren würde, würde ich eher ein reguläres Formular als Ajax machen. – nurdyguy

+0

true alles, was er brauchte, war nur die neue Zeile dynamisch hinzufügen und die Draw Extinsion-Funktion aufrufen, das Problem mit diesem Code ist, dass die datatable Ajax-Aufruf ist synchron, dann muss die Seite warten, dass Ajaxload passieren dann wird es verlagern –

1

Sie Antwort sollte

success: function (data) { 
        if (data.success) { 
         $('#edit').modal('hide'); 
         window.location.href="/Users/Index"; 
              } 
       } 

so etwas wie

return Json(new{success =true},JsonRequestBehaviour.DenyGet); 

und in Client-Seite werden Sie möglicherweise eine Fehlerfunktion hinzuzufügen, nur um zu wissen,

Verwandte Themen