Reputation: 248
I am trying to pass data in action method CloseCase
from cshtml page and want to pass an array of value at action side in controller.but I am getting an error. I am new to asp.net mvc so I can't say whether my approach is correct.
While passing value from ajax it is showing null value at CloseCase
method. I want to get command.Parameters.Add(":ICD_CASE_ID", casedetail[0]);
means casedetail[0]
value but while debugging i found value at method CloseCase null values. Any idea would be appreciated.
.cshtml
$(".btnrowvalue2").click(function () {
//var casedetails = new Array();
var tr = $(this).closest('tr');
var casedetail={};
var casedetails=[];
casedetail["FirstCol"] = tr.find('input[name="Chkb"]').val();
casedetail["SecondCol"] = tr.find('input[name="CaseId"]').val();
casedetail["ThirdCol"] = tr.find('input[name="Desc"]').val();
casedetail["FourthCol"] = tr.find('input[name="NBill"]').val();
casedetail["FifthCol"] = tr.find('input[name="TAmnt"]').val();
casedetail["SixthCol"] = tr.find('input[name="Stat"]').val();
casedetail["SeventhCol"] = tr.find('input[name="Cron"]').val();
casedetail["EightCol"] = tr.find('input[name="Clon"]').val();
casedetails.push(casedetail);
//alert('Type1 : ' + FirstCol + ' ' + SecondCol + ' ' + ThirdCol);
$.ajax({
type:"POST",
url:"/Home/CloseCase",
data:JSON.stringify(casedetails),
contentType:"application/json; charset=utf-8",
datatype:"json",
success:function(r){
alert(r + " record(s) inserted.");
}
});
});
controller side
public JsonResult CloseCase(List<Ipcell> casedetail)
{
try
{
conn.Open();
string qry = "UPDATE ASE_S SET ICD_STATUS='O',ICD_CLOSED_ON=:ICD_CLOSED_ON,ICD_CLOSED_BY=:ICD_CLOSED_BY WHERE ICD_CASE_ID =:ICD_CASE_ID";
OracleCommand command = new OracleCommand(qry, conn);
command.Parameters.Add(":ICD_CLOSED_ON", DateTime.Now);
command.Parameters.Add(":ICD_CLOSED_BY", Session[CommonConstants.SESSION_USER_ID]);
command.Parameters.Add(":ICD_CASE_ID", casedetail[0]);
int insertedRecords=command.ExecuteNonQuery();
return Json(insertedRecords);
}
catch (Exception ex)
{
}
finally
{
conn.Close();
}
return null;
}
model class
public class Ipcell
{
public string CaseId { get; set; }
public string Descripton { get; set; }
public int NoOfBill { get; set; }
public decimal TotalAmount { get; set; }
public DateTime From { get; set; }
public DateTime To { get; set; }
public string Type { get; set; }
public string Status { get; set; }
public DateTime CreatedOn { get; set; }
public DateTime ClosedOn { get; set; }
}
Upvotes: 0
Views: 76
Reputation: 305
I have checked your code and i found the issue
Check my screenshot and implement it is working for me.
Ajax Call
var casedetail = {};
var casedetails = [];
var date = new Date();
casedetail["CaseId"] = "1";
casedetail["Descripton"] = "2";
casedetail["NoOfBill"] = "3";
casedetail["TotalAmount"] = "4";
//casedetail["From"] = date.toISOString();
//casedetail["To"] = date.toISOString();
casedetail["Type"] = "7";
casedetail["Status"] = "8";
//casedetail["CreatedOn"] = date.toISOString();
//casedetail["ClosedOn"] = date.toISOString();
casedetails.push(casedetail);
$.ajax({
type: "POST",
url: "../Home/CloseCase",
data: JSON.stringify(casedetails),
contentType: "application/json; charset=utf-8",
datatype: "json",
success: function (r) {
alert(r + " record(s) inserted.");
}
});
Code
public JsonResult CloseCase(List<Ipcell> casedetail)
{
try
{
return Json(new { },JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
}
finally
{
}
return Json(new { }, JsonRequestBehavior.AllowGet);
}
public class Ipcell
{
public string CaseId { get; set; }
public string Descripton { get; set; }
public int NoOfBill { get; set; }
public decimal TotalAmount { get; set; }
public DateTime From { get; set; }
public DateTime To { get; set; }
public string Type { get; set; }
public string Status { get; set; }
public DateTime CreatedOn { get; set; }
public DateTime ClosedOn { get; set; }
}
Upvotes: 1
Reputation: 2523
I'd say that your problem is that your controller method doesn't recognizes your JSON string as a casedetail parameter.
Keep in mind that you're sending a string inside data on your AJAX call. The method, on its side, is waiting for a List of IpCell objects. I have serious doubts the inference engine would be able to convert on its own those data.
Try to change caseDetail to String on closeCase signature, and make a conversion inside the method to parse the JSON string to a list of IpCell elements (you'll probably want to create a method in your IpCell class to simplify this task).
Upvotes: 0