通过JQuery发布时,Model API控制器中的ModelState为空

时间:2012-08-20 17:25:42

标签: asp.net-mvc asp.net-web-api modelstate

更新

经过一些测试,我发现下面相同的代码在发布到常规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?

谢谢!

1 个答案:

答案 0 :(得分:0)

尝试更改ajax调用,看起来像这样:

$.ajax({
        url: "/api/reports/PutReport",
        data: { report: JSON.stringify(updatedReport) },
        type: "PUT",
        contentType: "application/json;charset=utf-8"
    });

模型状态即将生效,因为您未正确发布数据(这是我的假设)。希望正确命名数据将对其进行排序。