更新
经过更多测试后,我发现下面的相同代码在发送到常规 Controller 时工作正常。在这种情况下,ModelState 具有值。发布到 APIController 时问题仍然存在。
我正在通过 JQuery 发布到 Web API Controller 以更新数据。更新方法正在运行,但 ModelState 始终为空且 ModelState.IsValid 始终为真。 (我想使用 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?
谢谢!
最佳答案
尝试将您的 ajax 调用更改为如下所示:
$.ajax({
url: "/api/reports/PutReport",
data: { report: JSON.stringify(updatedReport) },
type: "PUT",
contentType: "application/json;charset=utf-8"
});
由于您没有正确发回数据(我的假设),模型状态将变得有效。希望正确命名数据可以解决这个问题。
关于asp.net-mvc - 通过 JQuery 发布时 Web API Controller 中的 ModelState 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12042180/