0

アップデート

さらにテストを行った結果、通常のコントローラーに投稿するときに、以下の同じコードが正常に機能することがわかりました。この場合、ModelStateには値があります。APIControllerに投稿するときに問題が残ります。

データを更新するために、JQueryを介してWebAPIコントローラーに投稿しています。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>

そして、更新操作を実行するためにWebAPIメソッドが呼び出されます。

public HttpResponseMessage PutReport(レポートレポート)
{{
    //レポートオブジェクトはここに適切に入力されます

    // ModelStateには値がなく、IsValidは常にtrueです

    if(ModelState.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 に答える