2017-06-22 39 views
-1

我是.net mvc的新手,我試圖創建一個請求並提交表單的簡單頁面。當我使用Ajax進行httppost請求時,頁面不會發布/重定向。Ajax在視圖中不起作用

JS文件這裏

<script> 
    $(document).ready(function() { 

     $("form").submit(function (e) { 


      var obj = { 

       Id : @Model.Id, 
       Name : '@Model.Name', 
       City : '@Model.City', 
       Gender : '@Model.Gender', 
       Dob : '@Model.Dob' 

      }; 

      $.ajax({ 

       url: '@Url.Action("Edit","Employee")', 
       type: 'POST', 
       dataType: 'json', 
       contentType: "application/json; charset=utf-8", 
       data: JSON.stringify(obj), 
       success: function (result) { 

        alert("Success"); 
       }, 

       failed: function (result) { 

        alert("Failed"); 
       } 

      }); 

      return false; 

     }); 

    }); 

</script> 

CSHTML鑑於此

[HttpPost] 
     public ActionResult Edit(Employee emp) 
     {    
      EmployeeBusinessLayer employeeBusinessLayer = new EmployeeBusinessLayer(); 
      if (ModelState.IsValid) 
      { 
       employeeBusinessLayer.Modify("Edit", emp); 

       return View(); 
      } 

      else return RedirectToAction("Index"); 

     } 

當我點擊 '保存'

@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 

    <div class="form-horizontal"> 
     <h4>Employee</h4> 
     <hr /> 
     @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
     @Html.HiddenFor(model => model.Id) 

     <div class="form-group"> 
      @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      @Html.LabelFor(model => model.Gender, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.DropDownList("Gender", new List<SelectListItem> 
      { 
       new SelectListItem { Text = "Male" , Value = "Male"}, 
       new SelectListItem { Text = "Female" , Value = "Female"} 
      }, "Select Gender" , new { @class = "form-control"}) 
       @Html.ValidationMessageFor(model => model.Gender, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      @Html.LabelFor(model => model.City, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.City, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.City, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      @Html.LabelFor(model => model.Dob, htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.Dob, new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.Dob, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Save" class="btn btn-default" /> 
      </div> 
     </div> 
    </div> 
} 

控制器代碼,沒有任何反應!我在這裏錯過了什麼?

+1

什麼是你想在這裏做什麼?發回剛剛發送給瀏覽器的原始模型值的要點是什麼?您在瀏覽器控制檯中遇到什麼錯誤? –

+0

你有沒有檢查你的控制檯?對於任何錯誤? – Curiousdev

+0

你也可以分享控制器代碼嗎?在控制端的郵政電話會發生什麼? –

回答

0

根據您所張貼的控制器代碼,更改您的視圖的這一部分:

$("form").submit(function (e) { 
     e.preventDefault(); 

     $.ajax({ 

      url: '@Url.Action("Edit","Employee")', 
      type: 'POST', 
      data: $("form").serialize(), 
      success: function (result) { 

       alert("Success"); 
      }, 

      failed: function (result) { 

       alert("Failed"); 
      } 

     }); 

     return false; 

    }); 

你也應該改變你的控制器,你不應該返回一個View();但是那是另一件事完全.. 。

+0

$(「form」)。serialize()。這也沒有效果。你能簡單介紹一下控制器如何處理Ajax數據嗎?當其方法是「Employee」類型時,如何向方法發送「Employee」對象? –

1

定義obj變量之前,加入這一行:

e.preventDefault(); 

選擇這樣的輸入:

var obj: { 
    Id: $('Id').val(), 
    Name: $('#Name').val(), 
    City: $('#City').val(), 
    Dob: $('#Dob').val(), 
    Gender: $("#Gender option:selected").val() 
} 
+0

這有幫助,謝謝!正如@Stephen指出的那樣,我試圖發佈相同的數據。 無論如何,我仍然在努力將「員工」對象傳遞迴控制器! –

+0

OP已經有'return false',所以'e.preventDefault();'是不必要的。這與腳本沒有執行的事實無關。 –

+0

當我現在運行時,它提醒我成功。但是我在控制器中錯誤地處理了數據。我不確定如何在httpost方法中處理這些數據。我確實使用了一個參數,我相信這是錯誤的。 –

4

您需要使用e.preventDefault();在您提交方法如下圖所示:

<script> 
 
    $(document).ready(function() { 
 

 
     $("form").submit(function (e) { 
 

 
      e.preventDefault(); //prevent default form submit 
 
      var obj = { 
 

 
       Id : @Model.Id, 
 
       Name : '@Model.Name', 
 
       City : '@Model.City', 
 
       Gender : '@Model.Gender', 
 
       Dob : '@Model.Dob' 
 

 
      }; 
 

 
      $.ajax({ 
 

 
       url: '@Url.Action("Edit","Employee")', 
 
       type: 'POST', 
 
       dataType: 'json', 
 
       contentType: "application/json; charset=utf-8", 
 
       data: JSON.stringify(obj), 
 
       success: function (result) { 
 

 
        alert("Success"); 
 
       }, 
 

 
       failed: function (result) { 
 

 
        alert("Failed"); 
 
       } 
 

 
      }); 
 

 
      return false; 
 

 
     }); 
 

 
    }); 
 

 
</script>

+0

認真 - 5 upvotes for a wrong answer。 OP在腳本中已經有'return false;',因此'e.preventDefault();'是完全不必要的。這與這個問題無關。 –

+0

我檢查過了,他錯過了e.preventDefault();這使得該頁面發佈。 \t \t \t我想你很樂意指出,不是爲了解決。 閱讀下面的評論! 這有幫助,謝謝!正如@Stephen指出的那樣,我試圖發佈相同的數據。無論如何,我仍然在努力將「員工」對象傳遞迴控制器! - Harsha Rao 23小時前 –

+0

再次閱讀我的評論。使用'return false;'可以防止表單提交。添加'e.preventDefault();'只是做同樣的事情!如果這兩行都被刪除了,則無關緊要 - 除了正常提交之外,還會進行ajax調用。再次。這與OP的問題無關。從他們的意見中可以清楚地看出他們不知道他們在做什麼,也沒有顯示相關的代碼。這個問題不能回答,因爲沒有任何OP在做什麼是有道理的。 –