【问题标题】:Trying to pass json value from view to controller试图将json值从视图传递到控制器
【发布时间】:2020-12-19 12:22:06
【问题描述】:

我正在尝试从 cshtml 页面以操作方法 CloseCase 传递数据,并希望在控制器的操作端传递一个值数组。但我收到错误消息。我是 asp.net mvc 的新手,所以我不能说我的方法是否正确。

从 ajax 传递值时,CloseCase 方法显示空值。我想得到command.Parameters.Add(":ICD_CASE_ID", casedetail[0]); 的意思是casedetail[0] 值,但是在调试时我发现方法CloseCase 空值的值。任何想法将不胜感激。

.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.");
            }
            });
        });

控制器端

 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;
        }

模型类

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; }
    }

【问题讨论】:

  • 欢迎来到 StackOverflow。请阅读How to Ask,并尝试提供minimal reproducible example
  • 你能分享从视图发送到控制器的json吗?
  • @ChetanRanpariya casedetail = {FirstCol:“on”,SecondCol:“2”,ThirdCol:“CAB”,FourthCol:“1”,FifthCol:“585.60”,...},我正在接收价值这边
  • ISpell 类没有 FirstCol、SecondCol 等属性...
  • @ChetanRanpariya 是对的。那是你的主要问题。而且,您似乎只将一行/记录传递给您的操作,所以我会将这个List&lt;Ipcell&gt; casedetail 更改为这个Ipcell casedetail。如果您应用该更改,则在此行中 command.Parameters.Add(":ICD_CASE_ID", casedetail[0]);casedetail[0] 替换为 casedetail.CaseId

标签: c# jquery asp.net ajax asp.net-mvc


【解决方案1】:

我检查了你的代码,我发现了问题

检查我的屏幕截图并实现它对我有用。

Ajax 调用

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.");
        }
    });

代码

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; }
        }

【讨论】:

  • 屏幕截图很少有用,因为人们必须转录文本,并在视觉上识别文本和文本图片之间的差异。相反,请描述您所做的更改,并将更改以文本形式包含在内,仅使用图片作为额外细节。
【解决方案2】:

我会说您的问题是您的控制器方法无法将您的 JSON 字符串识别为 casedetail 参数。

请记住,您是在 AJAX 调用中发送一个内部数据字符串。就其本身而言,该方法正在等待 IpCell 对象列表。我非常怀疑推理引擎能否自行转换这些数据。

尝试在 closeCase 签名上将 caseDetail 更改为 String,并在方法内部进行转换以将 JSON 字符串解析为 IpCell 元素列表(您可能希望在 IpCell 类中创建一个方法来简化此任务) .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    相关资源
    最近更新 更多