[英]MVC 5 Ajax call to database returning error
我是 MVC 的新手,到目前為止我已經連接了我的數據庫並使用默認的 CRUD 創建了一個實體控制器類。
但是,在我的Index.cshtml
我嘗試使用 ajax 腳本更新數據庫,但出現錯誤,我不知道從哪里開始。
Database : MyDB
Users Table
==========================================
| Column | Type | |
==========================================
| ID | int | Primary AI |
------------------------------------------
| Name | varchar (50) | NULL |
------------------------------------------
| Company | varchar (50 | NULL |
==========================================
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ID,Name,Company")] MyDB myDB)
{
if (ModelState.IsValid)
{
db.Users.Add(myDB);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(myDB);
}
<script>
$('a').click(function () {
$name = "John";
$company = "123Moving";
$.ajax({
url: '@Url.Action("Create", "MyDBsController")',
data: { 'Name': $name, 'Company' : $company },
type: "post",
cache: false,
success: function () {
alert("Success");
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr + ajaxOptions + thrownError);
}
})
})
</script>
我得到的錯誤是[Object object] error not found
您的問題是控制器操作中的參數:
public ActionResult Create([Bind(Include = "ID,Name,Company")] MyDB myDB)
您正在嘗試POST
一個User
到一個控制器,采用MyDB
我猜是你的DbContext。 它應該是:
public ActionResult Create([Bind(Include = "ID,Name,Company")] User user)
將User
替換為您的用戶類實際上是什么
您的 POST 方法裝飾有[ValidateAntiForgeryToken]
屬性,但您的 ajax 調用不傳遞令牌,因此該方法永遠不會運行..
刪除該屬性,或者如果您有一個包含@Html.AntiForgeryToken()
的表單,您可以使用傳遞令牌
var token = $('[name=__RequestVerificationToken]').val();
$.ajax({
....
data: { 'Name': $name, 'Company': $company, '__RequestVerificationToken': token },
或者更好,假設您有Name
和Company
表單控件,只需使用
data: $('form').serialize(),
這將序列化包括令牌在內的所有表單數據。
此外,正如另一個答案中所述的 drneel,您的模型似乎是User
,而不是MyDB
所以它會是
public ActionResult Create(User user)
邊注; 看起來您想要模型的所有屬性,因此您的[Bind(Include = "..")]
屬性有點毫無意義(默認情況下包含所有屬性)。 話雖如此, ID
(主鍵)屬性在“創建”方法中並不合適,惡意用戶很容易發回ID
值,從而導致您的方法失敗。 您應該使用僅包含Name
和“Company”屬性的視圖模型,然后將視圖模型屬性映射到數據模型的新實例並保存數據模型。 我還建議Name
屬性應該是NOT NULL
(也可能是Company
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.