asp.net-mvc - 通过 JQuery 发布时 Web API Controller 中的

更新

经过更多测试后,我发现下面的相同代码在发送到常规 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/

相关文章:

arm - AOSP 中的工具链

html - 在新选项卡中打开链接(在框架设置内)

asp.net-mvc-3 - 如何将Web应用程序转换为SaaS?

svn - 用于将更改的文件部署到生产 Web 服务器的工具

asp.net-mvc-3 - 如何将 IEnumerable 对象或数据从 View 传递到 Co

sql-server - 是否可以限制 Entity Framework 使用的连接数?

asynchronous - 如果它不存在,如何让nginx重试静态文件

php - session 提前结束

django - 移除 ForeignKey 后迁移到第三方模型

php - 来自另一个用户的 DBus