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
你的POST方法是用[ValidateAntiForgeryToken]
属性装饰的,但是你的ajax调用不传递令牌,所以这个方法永远不会运行。
删除属性,或者如果您有一个包含@Html.AntiForgeryToken()
的表单,您可以使用
var token = $('[name=__RequestVerificationToken]').val();
$.ajax({
....
data: { 'Name': $name, 'Company': $company, '__RequestVerificationToken': token },
或更好,假设您有Name
和Company
的表单控件,只需使用
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)
您正在尝试将POST
和User
连接到需要MyDB
的控制器,我猜这是您的DBContext。应该是:
public ActionResult Create([Bind(Include = "ID,Name,Company")] User user)
将User
替换为实际的用户类