大家好,我现在正在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帮助我做这项工作,提前感谢
答案 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。这只是一种方法论/风格的东西 - 它对数据绑定没有任何实际影响。