2

大家好,我现在正在处理 webapi,我需要更新数据,因为我有表(实体模型)

         id  | value
          1  | previous data
          2  | new data

现在我需要更新表意味着我正在更新 ckeditor 数据 iam 一些文本到 ckeditor 并且一旦鼠标移到 ckeditor div 我需要将该数据保存到数据库中所以当 iam 移动到控制器时一切正常我得到控制器空表单 ajax 调用可以你请帮帮我

这是我的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; }
 }

即使它显示错误并且在控制器中显示一些错误,例如对象引用而不是实例对象请帮助我完成这项工作,谢谢

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 回答