MVC 5 Ajax调用数据库返回错误

本文关键字:返回 错误 数据库 调用 Ajax MVC | 更新日期: 2023-09-27 18:10:19

我是新的MVC,到目前为止,我已经连接了我的数据库,并创建了一个实体控制器类与默认的CRUD。

然而,在我的Index.cshtml我试图用ajax脚本更新数据库,但我得到一个错误,我不知道从那里去哪里。

Database : MyDB
Users Table
==========================================
| Column     | Type         |            |
==========================================
| ID         | int          | Primary AI |
------------------------------------------
| Name       | varchar (50) | NULL       |
------------------------------------------
| Company    | varchar (50  | NULL       |
==========================================
<标题> MyDBsController.cs h1> Index.cshtml
<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

MVC 5 Ajax调用数据库返回错误

你的POST方法是用[ValidateAntiForgeryToken]属性装饰的,但是你的ajax调用不传递令牌,所以这个方法永远不会运行。

删除属性,或者如果您有一个包含@Html.AntiForgeryToken()的表单,您可以使用

传递令牌
var token = $('[name=__RequestVerificationToken]').val();
$.ajax({
  ....
  data: { 'Name': $name, 'Company': $company, '__RequestVerificationToken': token },

或更好,假设您有NameCompany的表单控件,只需使用

data: $('form').serialize(),

,它将序列化所有表单数据,包括令牌。

此外,正如在另一个答案中所指出的那样,您的模型似乎是User,而不是MyDB,因此它将是

public ActionResult Create(User user)

边注;似乎您想要模型的所有属性,因此您的[Bind(Include = "..")]属性有点无意义(默认情况下包含所有属性)。话虽如此,ID(主键)属性在"Create"方法中是不合适的,恶意用户可以很容易地发回ID值,导致您的方法失败。您应该使用只包含Name和'Company'属性的视图模型,然后将视图模型属性映射到数据模型的新实例并保存数据模型。我还建议Name属性应该是NOT NULL(也可能是Company)

您的问题是控制器动作中的参数:

public ActionResult Create([Bind(Include = "ID,Name,Company")] MyDB myDB)

您正在尝试将POSTUser连接到需要MyDB的控制器,我猜这是您的DBContext。应该是:

public ActionResult Create([Bind(Include = "ID,Name,Company")] User user)

User替换为实际的用户类