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

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

更新

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

相关文章:

c# - 更改 WebApi 应用程序的构建输出目录

javascript - Dropzone MVC 5 在上传时添加额外参数

javascript - Bootstrap Glyphicon(折叠和展开)不工作

asp.net-mvc - 下拉列表更改时重定向到 Controller / View

c# - 获取 TraceTelemetry 以显示在 Application Insights 时间线中

asp.net-web-api - 如何在 Swashbuckle 中替换 Swagger UI 标题 Logo

c# - 使用自定义验证属性进行模型验证

javascript - 如何组织多个 View 使用的 Backbone 模型?

asp.net-mvc - 当用户在使用默认的 MVC 成员资格提供程序注册后修改他们的电子邮件地址时,如何防止重复的电子邮件地址?

asp.net-mvc - 寻找 ModelState.IsValid 错误