データベースの更新のために.NETに渡したい次のモデルがあるBackboneプロジェクトがあります。
var myList = Backbone.Model.extend({
// Default attributes for the todo item.
defaults: function () {
return {
Name: "Default name"
};
},
url: "/my/myList",
"sync": mySyncFunction,
// Ensure that each todo created has `title`.
initialize: function () {
if (!this.get("Name")) {
this.set({ "Name": this.defaults.Name });
}
}
});
同期をオーバーライドするために以下を使用する
function mySyncFunction(method, model, options) {
if (method == 'GET') {
options.url = model.url;
}
else if (method == "create") {
options.url = model.url+"Post";
}
else {
options.url = model.url;
}
Backbone.emulateJSON = true
return Backbone.sync(method, model, options);
}
新しいアイテムを作成するときは、model.url + "Post" を使用していると想定し、model.get("Name") には正しいデータが含まれています。正しいセクションが実行され、データベースにエントリが作成されますが、名前は空です。
ただし、.NET コントローラーが投稿を処理すると、名前にはデータが含まれなくなります。
私のコントローラーコードは次のようになります。
public class myController : Controller
{
public ActionResult myList()
{
List<myCore.myList> l = new List<myCore.myList>();
l = myCore.myList.ListAll();
return Json(l, JsonRequestBehavior.AllowGet);
}
[HttpPost]
public ActionResult myListPost(myCore.myList doc)
{
doc.AccountGuid = Guid.NewGuid();
Boolean created = doc.Create();
return Json(doc);
}
[HttpPut]
public ActionResult myListPut(myCore.myList doc)
{
myCore.myList doc1 = new myCore.myList();
doc1.AccountGuid = Guid.Empty;
doc1.Name = "testPut";
Boolean created = doc1.Create();
return Json(doc1);
}
[HttpDelete]
public ActionResult myListDelete(myCore.myList doc)
{
//DeleteDoc(id);
myCore.myList doc1 = new myCore.myList();
doc1.id = Guid.NewGuid();
doc1.AccountGuid = Guid.Empty;
doc1.Name = "testDelete";
Boolean created = doc1.Create();
return Json(doc1);
}
}
モデル/クラスデータをコントローラーに取り込むために何をすべきか教えてください。
myList クラスは次のようになります。
public class myList
{
Guid _id = Guid.Empty;
String _name = String.Empty;
Guid _accountGuid = Guid.Empty;
public Guid id
{
get { return _id; }
set { _id = value; }
}
public String Name
{
get { return _name; }
set { _name = value; }
}
public Guid AccountGuid
{
get { return _accountGuid; }
set { _accountGuid = value; }
}
}
アップデート
Backbone.emulateJSON = true を削除した後、動作するようになりました
私はまだ削除部分を機能させることができませんが。404エラーが発生します。Post と Get のみが機能します。
コントローラーの中はこんな感じ。
[ActionName("myList")]
[HttpDelete]
public ActionResult myListDelete(myCore.myList doc)
{
doc.Name += "-DELETE";
return Json(doc);
}
アップデート
それも考え出しました。
データベース内の正しいエントリを削除するために、任意のモデルまたはパラメータを渡すように見えますが。