好吧,它可能类似于How to call an absolute service for save changes with browsejs,但我没有得到明确的答案。
我有一个应用程序Knockout.js/Breeze.js/MVC4 and No Entity Framwork
My requirement
- 单击保存按钮时我需要调用 API 并使用 Breeze 将数据传递给适当的控制器。
我的按钮单击事件为:-
//Saving Profile Details
fnSave_click = function () {
//This profileModel will have the updated data which needs to be pushed to backend
var jsonData = {};
jsonData.fName = profileModel.fName;
jsonData.lname = profileModel.lname;
// Previously i used to make an Ajax call and save the data like below commented code:-
/*
$.ajax({
type: "POST",
url: 'api/profile/ChangeProfileDetails',
dataType: "json",
contentType: 'application/json; charset=utf-8',
data: ko.toJSON(jsonData)
}).done(function (data) {
}).fail(function (request, error) {});
*/
//How do I pass my jsonData to Controller?? Is there any parameter option??
return manager.saveChanges()
.then(function () {
console.log("changes saved");
})
.fail(function () {
console.log("changes failed");
});
}
.......................
现在,我不明白......我将在哪里定义我的控制器方法名称?我将如何传递这些数据?
我创建了我的微风经理如下: -
// Start - Created breeze data service and manager for query on profile controller
var dataService = new breeze.DataService({
serviceName: "api/Profile",
hasServerMetadata: false // don't ask the server for metadata,
});
var manager = new breeze.EntityManager({
dataService: dataService
});
我前一天开始使用微风。所以如果我做错了什么,请告诉我。
[更新]
最后,这里ToDo app with Knockout and Breeze.js
对此进行了很好的解释。我没有得到-单击“保存”时如何调用(控制器)这个(控制器)。SaveChanges
function saveChanges() {
return manager.saveChanges()//How does this calls SaveChanges method of controller
.then(function () { logger.success("changes saved"); })
.fail(saveFailed);
}
如果我需要调用其他 API 方法,我需要做什么'api/Test/MyMethod'
?
[更新 2] @Jay Traband
。在您回复后,我想更新我的问题。
我已经浏览了这个发布说明的链接,其中指出: -
添加了“命名保存”。默认情况下,EntityManager.saveChanges 方法将保存请求发送到名为“SaveChanges”的端点。使用“命名保存”,您可以针对不同的服务器端点,例如在另一个 Web API 控制器上任意命名的操作方法。SaveOptions 类有两个新属性。一个 resourceName(用于操作方法)和一个 dataService(用于针对不同的控制器)。假设您要保存所有待处理的更改,您可以编写
var so = new SaveOptions({
resourceName: "myCustomSave"
});
// null = 'all-pending-changes'; saveOptions is the 2nd parameter
myEntityManager.SaveChanges(null, so);
我试过这样
我的 JS 文件代码为 -
debugger;
var option = new breeze.SaveOptions({ resourceName: 'myCustomSave' })
return manager.saveChanges(null, option)
我的控制器为:-
[HttpPost]
public SaveResult MyCustomSave(JObject saveBundle)
{
return null;
}
现在 - 这不会在控制台中引发错误,也不会调用我的 Controller 方法。