gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 08:01:47 25 4
gpt4 key购买 nike

更新

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com