[英]How to insert data into a database using jQuery / Ajax in ASP.NET MVC?
試圖使用ajax將數據插入數據庫時,我已經被困了幾個小時,試圖查找錯誤。 當我單擊提交按鈕時,它只是重新加載但不保存。 我對這個問題感到困惑。 我搜索了許多博客,但沒有找到解決此問題的准確方法。
模型類
public class Semester
{
[Key]
public int SemesterId { get; set; }
[Display(Name = "Semester Code")]
[Required(ErrorMessage = "please enter semester code")]
public string SemesterCode { get; set; }
[Display(Name = "Semester Name")]
[Required(ErrorMessage = "Please enter semeter name")]
public string SemesterName { get; set; }
}
控制器[HttpGet]
public ActionResult SaveSemesterGet()
{
return View();
}
public JsonResult AsCreateSemester(Semester semester){
db.Semesters.Add(semester);
db.SaveChanges();
return Json(semester, JsonRequestBehavior.AllowGet);
}
索引視圖:
@model CampusManagementApp.Models.Semester
<h2>SaveSemesterGet</h2>
<form method="POST">
@Html.AntiForgeryToken()
<div >
<h4>Semester</h4>
@Html.ValidationSummary(true)
<div class="form-group">
@Html.LabelFor(model => model.SemesterCode, new { @class = "control-
label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.SemesterCode)
@Html.ValidationMessageFor(model => model.SemesterCode)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.SemesterName, new { @class = "control-
label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.SemesterName)
@Html.ValidationMessageFor(model => model.SemesterName)
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" id="btn" value="SAVE"/>
</div>
</div>
</div>
<div>
@* @Html.ActionLink("Back to List", "Index")*@
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
<script>
$(document).ready(function() {
$("#btn").click(function(a) {
a.preventDefault();
var code = $("#SemesterCode").val();
var name = $("#SemesterName").val();
var jsonData = {
SemesterCode: code,
SemesterName: name
};
$.ajax({
type: "POST",
url: '@Url.Action("AsCreateSemester", "Semester")',
data: JSON.stringify(jsonData),
dataType:"json",
success:function(data) {
alert(data.SemesterName+"successfully inserted");
},
failure: function () {
alert("not successfull");
}
});
</script>
如何解決這個問題?
為什么使用提交按鈕? 由於您制作的JS函數正在處理帖子,因此您無需使用“提交”按鈕,這將導致整個頁面的重新加載。 只需使用普通按鈕即可。
<input type="button" id="btn" value="SAVE"/>
視圖中存在幾個問題:
1)您已訂閱了提交按鈕的click
事件,而沒有阻止提交表單的默認操作。 這觸發了POST操作,該操作重定向到控制器操作並重新加載頁面,而沒有任何時間執行AJAX函數。 您應該使用preventDefault()
來取消按鈕的默認操作。
2)當使用type: "POST"
選項時,接收AJAX回調的控制器沒有[HttpPost]
屬性。 考慮在控制器名稱的頂部添加[HttpPost]
屬性。
3)您的AJAX屬性名稱列表與模型類中定義的屬性名稱不匹配。 考慮使用一個接受兩個屬性的視圖模型,並將其用作操作參數。
因此,AJAX回調應按照以下示例進行設置:
視圖模型
public class SemesterVM
{
public string SemesterCode { get; set; }
public string SemesterName { get; set; }
}
視圖
<input type="button" id="btn" value="SAVE" />
JS(點擊事件)
$('#btn').click(function (e) {
e.preventDefault(); // prevent default submit
var code = $("#SemesterCode").val();
var name = $("#SemesterName").val();
// all property names must be same as the viewmodel has
var jsonData = {
SemesterCode: code,
SemesterName: name
};
$.ajax({
type: "POST",
url: '@Url.Action("SaveSemester", "Student")',
contentType: "application/json;charset=utf-8",
data: JSON.stringify(jsonData),
dataType: "json",
success: function() {
// do something
}
});
});
控制器動作
[HttpPost]
public JsonResult SaveSemester(SemesterVM semester)
{
// add semester data
return Json(semester);
}
像下面一樣更改ajax()方法后,它可以工作。
$.ajax({
type: "POST",
url: '@Url.Action("AsCreateSemester", "Semester")',
data: {
SemesterCode: code,
SemesterName: name
},
success:function(data) {
alert(data.SemesterName+"successfully inserted");
},
failure: function () {
alert("not successfull");
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.