0

更新

经过更多测试后,我发现以下相同的代码在发布到常规控制器时可以正常工作。在这种情况下,ModelState 具有值。发布到APIController时问题仍然存在。

我通过 JQuery 发布到 Web API 控制器以更新数据。更新方法有效,但 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(报告报告)
{
    // 报告对象在此处正确填充

    // ModelState 没有值,IsValid 始终为真

    如果(模型状态。IsValid)
    {
        // 更新对象
    }
}

这是发布到 Web API 方法的正确方法吗?是否需要另一个步骤来填充 ModelState?

谢谢!

4

1 回答 1

0

尝试将您的 ajax 调用更改为如下所示:

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

模型状态的出现与您没有正确发布数据一样有效(这是我的假设)。希望正确命名数据可以解决这个问题。

于 2012-08-21T08:55:22.850 回答