Model:
public class Product { public int ProductID { get; set; } public string Name { get; set; } public string ProductNumber { get; set; }
public List<ProductLocations> Locations { get; set; } }
public class ProductLocations { public string Address { get; set; } }
Controller
[GridDataSourceAction] [HttpPost] public ActionResult PostDataMethod3(Product Param1, string Param2, string Param3) { try { List<Product> products = new List<Product>();
products.Add(new Product { ProductID = 1, Name = "Product 1", ProductNumber = "12345" }); products.Add(new Product { ProductID = 2, Name = "Product 2", ProductNumber = "12346" }); products.Add(new Product { ProductID = 3, Name = "Product 3", ProductNumber = "12347" }); products.Add(new Product { ProductID = 4, Name = "Product 4", ProductNumber = "12348" }); products.Add(new Product { ProductID = 5, Name = "Product 5", ProductNumber = "12349" });
return View(products.AsQueryable()); } catch (Exception ex) { string error = ex.Message; return null; } }
AJAX call
var appJson = { "Param1": { "ProductID": 1, "Name": "test product", "ProductNumber": "P123", "Locations": [{ "Address": "Address1" }, { "Address": "Address2" }]}, "Param2": "Param2", "Param3": "Param3" };
$('#postData3').click(function (e) { e.preventDefault();
$.ajax({ url: '@(Url.Action("PostDataMethod3"))', type: 'POST', traditional: true, contentType: "application/json", dataType: "json", data: JSON.stringify(appJson), success: function (response) { alert('Succcess'); $('#grid').igGrid({ dataSource: response }).igGrid("dataBind"); }, error: function (xhr, ajaxOptions, thrownError) { alert('Failure - ' + xhr.responseText); $('#grid').igGrid({ dataSource: null }).igGrid("dataBind"); } }); });
Eroor:
2022infragisticerror.igGridQueryStringToJson.zip
Hello Anitha,
Thank you for the provided sample!
I’ve been looking into your question and after an investigation what I could say is that the initial error is thrown because the “appJson” variable was not being parsed properly. It can be passed to the “data” property without being stringified. Another issue I have found is that the “PostDataMethod3” never receives its parameters even if the grid loads, so changing the code in the following way provides the desired results:
var appJson = {
Param1: { "ProductID": 1, "Name": "test product", "ProductNumber": "P123", "Locations": [{ "Address": "Address1" }] },
Param2: { "ProductID": 2, "Name": "test product", "ProductNumber": "P123", "Locations": [{ "Address": "Address1" }] },
Param3: { "ProductID": 3, "Name": "test product", "ProductNumber": "P123", "Locations": [{ "Address": "Address1" }] }
}
…
$.ajax({
url: '@(Url.Action("PostDataMethod3"))',
type: 'POST',
data: appJson,
success: function (response) {
alert("Success");
$('#grid').igGrid({ dataSource: response }).igGrid("dataBind");
},
error: function (xhr, ajaxOptions, thrownError) {
alert('Failure - ' + xhr.responseText);
$('#grid').igGrid({ dataSource: null }).igGrid("dataBind");
});
Attached could be found my sample for your reference. Please test it on your side and let me know how it behaves.
Regards, Aleksandar Atanasov,
Infragistics.
Index.zip
Can you check this as priority
Hello Anitha, In order to ensure that your issue is addressed correctly, I will need some additional information regarding your scenario. Can you please answer the following questions: Are you using the trial dependencies? Did you install the dependencies using NuGet or do you run them locally? Did you test the previously provided sample and is there an error message when testing it? In addition it would be great if you could provide a small, isolated sample demonstrating the issue in order to be able to investigate this further and find the root cause of the behavior. This information is going to be highly appreciated and will help me in my further investigation. Looking forward to hearing from you. Regards, Aleksandar Atanasov, Infragistics
Hello Axl Atanasov,
Do you any fix for this.
Taking [GridDataSourceAction] off the table is not a good idea. You are converting JsonResultset, however my application is massive and relies on [GridDataSourceAction] on a ton of screens. Whenever I call products.AsQueryable(), every one of my apps returns a View. geometry dash
After an investigation, I have determined that the GridDataSourceAction attribute intended use is when the request is made directly from the grid using a ‘GET’ request. Using an external ‘POST’ ajax call like in the example provided the GridDataSourceAction throws an exception. What I can suggest is to create a duplicate method to be called when $.ajax is used that does not use the attribute but instead returns a JsonResult.
Thank you for using Infragistics components.
Regards, Aleksandar Atanasov, Infragistics.
No, it's not a good solution to remove [GridDataSourceAction]. my application is so big it full depended on [GridDataSourceAction] on lots of screens .. even your are converting JsonResultset. All my application using return View(products.AsQueryable());
I am expecting solution GridDataSourceAction why it's throwing exception if my payload has List or Array.You can could find path for GridDataSourceAction that helps a lot for all user who trying to to use Infragistics.Web.Mvc, Version=5.22.2.7.
After further investigation I was able to discover that the GridDataSourceAction attribute is used when filtering or paging is handled remotely by the server and it is not intended for a post request to the server. In order to achieve the desired behavior, what I could suggest is to remove the attribute and to convert the result in the PostDataMethod3 to json result object as below:
public ActionResult PostDataMethod3(Product Param1)
{
try
List<Product> products = new List<Product>();
products.Add(new Product { ProductID = 7, Name = "Product 1", ProductNumber = "12345" });
products.Add(new Product { ProductID = 2, Name = "Product 2", ProductNumber = "12346" });
products.Add(new Product { ProductID = 3, Name = "Product 3", ProductNumber = "12347" });
products.Add(new Product { ProductID = 4, Name = "Product 4", ProductNumber = "12348" });
products.Add(new Product { ProductID = 5, Name = "Product 5", ProductNumber = "12349" });
JsonResult result = new JsonResult();
result.Data = products;
result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
return result;
Please test it on your side and let me know how it behaves.
Regards, Aleksandar Atanasov, Infragistics
I have done some work around this. It an issue with Infragistics.Web.Mvc, Version=5.22.2.7.
GridDataSourceActionAttribute throwing exception incase of request/response has array object.
If you can get solution for this that would be great.