如何解决尝试将JSON值从视图传递到控制器
我正在尝试从cshtml页面以操作方法CloseCase
传递数据,并希望在controller的操作端传递值数组。但是我遇到错误。我是asp.net mvc的新手,所以我不能说我的方法是否正确。
从ajax传递值时,它在CloseCase
方法中显示空值。我想获取command.Parameters.Add(":ICD_CASE_ID",casedetail[0]);
的意思是casedetail[0]
的值,但是在调试时我在方法CloseCase的null值中找到了值。任何想法将不胜感激。
.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; }
}
解决方法
我已经检查了您的代码,发现了问题
检查我的屏幕截图并实现它对我有用。
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; }
}
,
我要说的是,您的问题是您的控制器方法无法将JSON字符串识别为casedetail参数。
请记住,您正在通过AJAX调用在数据内部发送字符串。该方法本身正在等待IpCell对象的列表。我非常怀疑推理引擎能否自行转换这些数据。
尝试在closeCase签名上将caseDetail更改为String,并在方法内部进行转换以将JSON字符串解析为IpCell元素列表(您可能希望在IpCell类中创建一个方法来简化此任务)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。