Why is the update operation not posting any data? - json

I am using the Kendo Grid with inline editing. When I click the "Update" button, a POST gets made to my controller method with this signature. The controller action gets hit, so the POST is working.
[HttpPost]
public HttpResponseMessage SaveAccountAdmin(string jsonCompanyContacts)
However the POST data in the update operation never arrives - its always null.
update: {
url: "/Company/SaveAccountAdmin",
contentType: "application/json; charset=utf-8",
type: "POST",
dataType: "json",
data: {
jsonCompanyContacts: "John Doe"
}
},
Here is the FULL data source code.
var dataSource = new kendo.data.DataSource(
{
batch: false,
pageSize: 10,
transport: {
create: {
url: "/Company/SaveAccountAdmin",
contentType: "application/json; charset=utf-8",
type: "POST",
dataType: "json"
},
read: {
url: "/Company/ReadAccountAdmin"
},
update: {
url: "/Company/SaveAccountAdmin",
contentType: "application/json; charset=utf-8",
type: "POST",
dataType: "json",
data: {
jsonCompanyContacts: "John Doe"
}
},
//destroy: {},
parameterMap: function (data, type) {
return kendo.stringify(data);
}
},
this doesnt work either:
update: {
url: "/Company/SaveAccountAdmin",
contentType: "application/json; charset=utf-8",
type: "POST",
dataType: "json",
//data: { "jsonCompanyContacts": kendo.stringify({ jsonCompanyContacts: "John Doe" }) }
data: { "jsonCompanyContacts": "John Doe" }
},
//destroy: {},
parameterMap: function (data, type) {
return kendo.stringify(data);
}
BUT THIS WORKS- WHY?
update: {
url: "/Company/SaveAccountAdmin",
contentType: "application/json; charset=utf-8",
type: "POST",
dataType: "json",
//data: { "jsonCompanyContacts": kendo.stringify({ jsonCompanyContacts: "John Doe" }) }
//data: { "jsonCompanyContacts": "John Doe" }
},
//destroy: {},
parameterMap: function (data, type) {
return kendo.stringify({ "jsonCompanyContacts": "John Doe" });
}

The value is not passed to the controller as a string. Try using a model. This might help: MVC3 & JSON.stringify() ModelBinding returns null model
UPDATE
You really don't want to do it like that. Might work in theis one case, but you are shooting yourself in the foot.
Model
public class CompanyContactModel
{
public string CompanyContacts { get; set; }
}
Controller Signature
public JsonResult SaveAccountAdmin(CompanyContactModel companyContactModel)
...
Better
public JsonResult SaveAccountAdmin([DataSourceRequest]DataSourceRequest request, CompanyContactModel companyContactModel)
...
Update and Return and put into List
If error: ModelState.AddModelError(string.Empty, e.Message);
DataSourceResult result = [Your Model List].ToDataSourceResult(request, ModelState);
return Json(result, JsonRequestBehavior.AllowGet);
}

Try doing this in your update definition:
update: {
url: "/Company/SaveAccountAdmin",
contentType: "application/json; charset=utf-8",
type: "POST",
dataType: "json",
data:{ "jsonCompanyContacts": kendo.stringify({ jsonCompanyContacts: "John Doe" })}
}
You might have to remove the operation in your parameterMap for this to work. The main thing is that you want to post a variable with the same name as in your controller. That variable should contain your stringified data.
You could also move this operation to your parameterMap if you want.

I had similar problem like you.I am getting values from the broswer , but its not posting the values to the update action model.
In my case I used "[ScriptIgnore(ApplyToOverrides = true)]" on the model which works fine.

Related

Symfony $request->getContent() in bad format?

i send a request to my symfony backand via
$.ajax({
url: "/example/example",
method: "POST",
data: { test: "hallo", test2 : "hallo2" },
contentType: "application/json; charset=utf-8",
dataType: "json"
...
but my i become in controller when i use $request->getContent() the following output:
test=hallo&test2=hallo
but i need the json formatted content, how i can get this from the request? Like so:
[
{"test" : "hallo"},
{"test2" : "hallo2"}
]
You are not sending JSON data to your backend, you can use JSON.strinify to do this.
var data = [
{"test" : "hallo"},
{"test2" : "hallo2"}
];
jsonData = JSON.stringify(data);
$.ajax({
url: "/example/example",
method: "POST",
data: jsonData,
contentType: "application/json; charset=utf-8",
dataType: "json"
...

How to send array with json using ajax

How do I send an array with json using ajax? I want to store email and name:
$.ajax({
url: 'index.php?route=module/newsletters/news',
type: 'post',
data: 'email=' + $('#txtemail').val() ,
dataType: 'json',
success: function(json) {
alert(json.message);
}
});
Let's suppose you have an array?
var array = [
"student1" : {
"name": "jon",
"email": "test#example.com"
},
"student2" : {
"name": "jon2",
"email": "test2#example.com"
}
]
$.post('index.php?route=module/newsletters/news', {
data : JSON.stringify(array),
datatype : 'application/json',
}, function(success) {
console.log(success)
});
Your question is not clear.please write your question in correct format.then community can be resolve your question easily.
I assume your problem and give solution for that.
var array = {name:'dua',email:'dua#gmail.com'};
$.post('index.php?route=module/newsletters/news', {
data : JSON.stringify(array)
}, function(success) {
console.log(success)
});
var postData = { "email":email,"name":name }
$.ajax({
url: 'index.php?route=module/newsletters/news',
type: 'post',
data: postData,
dataType: 'json',
success: function(json) {
alert(json.message);
}
});

Pass Date from View to Controller with JSON

I am trying to pass the date by ajax to controller as below:
$.ajax({
type: "POST",
contentType: 'application/json',
url: '/UserReport/GenerateReport',
data: JSON.stringify({
'clientId': $('#reportClientDropdown').val(),
'dateFrom': $('#datePickerFrom').val(),
'dateTo': $('#datePickerTo').val()
}),
success: function (succ) {
//
},
error: function (data) {
}
});
dateFrom and dateTo are in format dd/mm/yyyy.
I am getting 500 error after this call. Here is my controller
public JsonResult GenerateReport(int userId, int clientId, DateTime dateFrom, DateTime dateTo)
Is there a problem with DateTime parameter?
specify ajax request datatype jQuery.ajax()
$.ajax({
url: '/UserReport/GenerateReport',
type: "POST",
cache: false,
dataType: 'json',
contentType: "application/json; charset=utf-8",
data: JSON.stringify({
'userId': 1,
'clientId': $('#reportClientDropdown').val(),
'dateFrom': $('#datePickerFrom').val(),
'dateTo': $('#datePickerTo').val()
}),
success: function (result) {
console.log(result);
},
error: function (xhr) {
alert('Error: ' + xhr.statusText);
}
});

Ajax post data store with json and jsonData

i want to write a data store, that gets its data by an ajax call. The ajax call has to be a http post message and has to contain some data in json format.
Thats what I have so far:
Ext.define("MyApp.store.FileContent", {
extend: "Ext.data.Store",
model:'MyApp.model.FileContent',
autoLoad: true,
proxy: {
actionMethods : {
read : 'POST'
},
type: 'ajax',
defaultHeaders:{
'Content-Type': 'application/json; charset=utf-8',
},
url : apiUrl + 'Files/GetFileInfo',
jsonData : '{"file": "myfile"}'
}
});
The call to the webservice works, but the variable "file" is always empty. What is wrong here?
Got it by writing a custom proxy
store:
Ext.define("MyApp.store.FileContent", {
extend: "Ext.data.Store",
model:'MyApp.model.FileContent',
autoLoad: true,
requires: ['MyApp.proxy.FileContent'],
proxy: {
type: 'FileContent'
}
});
proxy:
Ext.define('MyApp.proxy.FileContent', {
extend: 'Ext.data.proxy.Proxy',
alias: 'proxy.FileContent',
create: function (operation, callback, scope) {
//Here goes your create logic
},
read: function (operation, callback, scope) {
Ext.Ajax.request({
url: apiUrl + 'Files/GetFileInfo',
method: "POST",
defaultHeaders:{
'Content-Type': 'application/json; charset=utf-8',
},
jsonData: '{"file": "myfile"}',
success: function(response){
var json = JSON.parse(response.responseText);
},
failure: function(){
alert("fail");
}
});
},
update: function (operation, callback, scope) {
//Here goes your update logic
},
destroy: function (operation, callback, scope) {
//Here goes your delete logic
}
});

how connect with web service

I am trying to get some data from a web service:
$.ajax({
type: 'POST',
url: "http://192.******.asmx?op=GetJSONString",
method: "serverCallback",
data: "Select con.cod as codigo, con.res as descripcion from con where ide>0",
success: function(data){alert(data)},
});
How can I get the returned JSON data?
Here is what my calls look like. Can you be more specific of the issue you are having?
$.ajax({
type: "POST",
data: "SOME DATA",
dataType: "json",
url : "/myapp/service.json",
cache: false,
error: function() {
alert("There was an issue");
}
,
success: function(data)
{
processJson(data);
}
});
I will also post what has worked with me for asmx services.
In the example below, for "url": "/service/Details.asmx/Reject", the "/Reject" is the method name in the web service (asmx) file.
$.ajax({
"dataType": 'json',
"contentType": "application/json; charset=utf-8",
"type": "POST",
"url": "/service/Details.asmx/Reject",
"data": "{\"itemId\":\"" + id + "\",\"comment\":\"" + comms + "\"}",
"success":
function (msg) {
alert("Yea it worked!");
});
}
});