我有以下问题: 我在我的MVC控制器中使用PUT方法
[HttpPut, Route("{id:int}")]
public IHttpActionResult Update(int id, [FromBody]Student student)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
using (var ctx = new EfDbContext())
{
student.Id = id;
ctx.Students.Attach(student);
var dbEntry = ctx.Entry(student);
dbEntry.State = EntityState.Modified;
if (student.Grades != null)
{
foreach (var grade in student.Grades)
{
ctx.Grades.Attach(grade);
var entry = ctx.Entry(grade);
entry.State = grade.Id == 0 ? EntityState.Added :
EntityState.Modified;
}
}
ctx.SaveChanges();
}
return Ok();
}
我也有我的javascript在localhost网站上使用HTML表单。
function addStudent() {
console.log($("#newStudent").serializeArray())
$.ajax({
url: 'http://localhost:56658/api/api/students',
type: 'post',
dataType: 'json',
data: $("#newStudent").serializeArray(),
success: function (data) {
$('#students').append(listItem(data));
}
});
}
和我的editStudent脚本(这是问题)
function editStudent(id) {
console.log($("#newStudent").serializeArray())
$.ajax({
url: 'http://localhost:56658/api/api/students/' + id,
type: 'put',
dataType: 'json',
data: { id: id,student: $("#newStudent").serializeArray() },
success: function (data) {
$('#students').append(listItem(data));
}
});
}
如您所见,我有两个几乎相同的脚本。现在,问题在于editStudent - 我的后端在我按下Web上的提交按钮时返回badrequest(所有文本字段都填充了有效数据)。添加学生工作正常(我也在POST方法中检查模型的有效性)。 “编辑”操作的表格是用于立即添加学生的表格的精确副本(为了确保我避免在字段ID等中出现任何拼写错误,所以我不期待那里的问题。
哪里可能是问题?在使用Postman进行测试时,Put工作正常,但我无法使用JS。
我会感激任何帮助 干杯
答案 0 :(得分:0)
您在正文中传递了id
,但在行动方法中,您只需要Student
来自正文。
更改data
中的ajax
:
data: $("#newStudent").serializeArray(), // pass only student
答案 1 :(得分:0)
为什么要使用put?
使用put,您希望在服务器上放置/替换特定资源。
在此URL下找不到资源,因此您收到错误请求。
基本上,请求根本不会路由到您的控制器方法。