Mohan
Mohan

Reputation: 248

Trying to pass json value from view to controller

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

Answers (2)

Purvesh Sangani
Purvesh Sangani

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

Bardo
Bardo

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

Related Questions