如何使用jquery在web api中更新?

时间:2012-10-30 08:23:10

标签: jquery asp.net-web-api updating

大家好,我现在正在webapi上工作,我需要更新数据,我有桌子(entitymodel)

         id  | value
          1  | previous data
          2  | new data

现在我需要更新表格意味着iam将ckeditor数据更新为一些文本到ckeditor并且一旦mouseleves ckeditor div我需要将数据保存到db中所以一切都是fing当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>

这里iam有数据(值)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帮助我做这项工作,提前感谢

1 个答案:

答案 0 :(得分: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。这只是一种方法论/风格的东西 - 它对数据绑定没有任何实际影响。