2

こんにちは、私は今 webapi に取り組んでいます。ここでデータを正しく更新する必要があります。テーブル (entitymodel) があります。

         id  | value
          1  | previous data
          2  | new data

今、私はテーブルを更新する必要があるということは、私がckeditorデータを更新していることを意味します。私はいくつかのテキストをckeditorに入れています。そして、ckeditor divをマウスで動かしたら、そのデータをdbに保存する必要があります。助けてください

ここに私のajaxcall:

 <script type="text/javascript">
$(document).ready(function () {
var editor = CKEDITOR.editor.replace('editor1');
$('#btndiv').mouseleave(function (event) {
    $('#btndiv1').hide("slow");
        alert(1);
        var value = editor.getData();
        $('#btndiv').append(value);
    // send your ajax request with value

        var dataToPost = JSON.stringify(value);
        alert('hi');
        alert(dataToPost+"got data");
        $.ajax({
            type: "Put",
            url: "/api/UpdateCkeditor",
            contentType: "application/json; charset=utf-8",
            data: dataToPost,
            dataType: "json",
            success: function () {
                // do what you want on success.


            }
        });
    });
});
</script>

ここでは、データ (値) od を持っています。コントローラーに移動すると、空が表示されます。

ここに私のコントローラー:

      public void Put(ckeditormodels value)
    {
        webapiEntities db = new webapiEntities();

        var empObj = db.ckeditorDatas.First(c => c.value ==value.value);
        empObj.value = value.value;

        db.SaveChanges();

    }

ここに私のモデル:

     public class ckeditormodels
{
    public int id { get; set; }
    public string value { get; set; }
 }

それでもエラーが表示され、コントローラーでオブジェクト参照のようなエラーが表示される場合でも、インスタンスのオブジェクトへの参照ではありませんplzがこの作業を行うのを手伝ってくれます。

4

1 に答える 1

2

.ajax()呼び出しのdataプロパティを構造化した方法が原因で、モデルバインディングを取得していません。基本的に、現在投稿しているのは単なるプレーンテキストの集まりであり、JSONオブジェクトではありません。

代わりにこれを試してください:

var id = getId(); // Implement this to actually get your ID.

$.ajax({
    type: "Put",
    url: "/api/UpdateCkeditor",
    contentType: "application/json; charset=utf-8",
    data: { 'id': id, 'value': dataToPost },
    dataType: "json",
    success: function () {
        // do what you want on success.
    }
});

プロパティの形成方法に注意してください。dataこれは、サーバー側にバインドするモデルの署名と完全に一致するオブジェクトです。

また、サーバー側のメソッドシグネチャで、次のように変更することをお勧めします。

public void Put([FromUri]int id, [FromBody]ckeditormodels value) {
    value.id = id;
    webapiEntities db = new webapiEntities();

    var empObj = db.ckeditorDatas.First(c => c.value == value.value);
    empObj.value = value.value;

    db.SaveChanges();
}

その理由は、既存のオブジェクトに変更を加えているためです。RESTfulの観点からは、更新されている一意のサーバー側リソース(レコードID)を示すURLを使用する方が適切です。ただし、これは方法論/文体的なものにすぎません。データバインディングには実際の影響はありません。

于 2013-02-28T20:31:57.367 に答える