更新
经过一些测试,我发现下面相同的代码在发布到常规Controller时工作正常。在这种情况下,ModelState具有值。发布到 APIController 时会出现问题。
我通过JQuery发布到Web API Controller来更新数据。 update方法正常工作,但ModelState始终为空,ModelState.IsValid始终为true。 (我想使用ModelState来执行模型属性的服务器端验证)
在我看来,我使用JQuery发布新的对象值:
@model MyProject.mvc.ViewModels.ReportsViewModel
using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myForm" }))
{
@Html.EditorFor(model => model.Report)
<button type="submit" onclick="UpdateObject(); return false;">Update</button>
}
<script type="text/javascript">
function UpdateObject() {
var updatedReport = {
ID: $("#ID").val(),
Name: $("#Name").val()
};
$.ajax({
url: "/api/reports/PutReport",
data: JSON.stringify(updatedReport),
type: "PUT",
contentType: "application/json;charset=utf-8"
});
return false;
}
</script>
调用我的Web API方法来执行更新操作:
public HttpResponseMessage PutReport(Report report) { // report object is properly populated here // ModelState has no values and IsValid is always true if (ModelState.IsValid) { // update object } }
这是发布到Web API方法的正确方法吗?是否需要另一个步骤才能填充ModelState?
谢谢!
答案 0 :(得分:0)
尝试更改ajax调用,看起来像这样:
$.ajax({
url: "/api/reports/PutReport",
data: { report: JSON.stringify(updatedReport) },
type: "PUT",
contentType: "application/json;charset=utf-8"
});
模型状态即将生效,因为您未正确发布数据(这是我的假设)。希望正确命名数据将对其进行排序。