C# ASP.Net WebForms Ajax序列化类型为';System.Reflection.Module';
我正在使用一个ASP.NETWebForms项目,并且正在使用JQuery发布数据,并在输入数据之后从数据库中返回true或false结果 我必须强调,这可以在本地和测试服务器上工作,但不能在生产环境中工作 我需要在测试和本地更改的web配置文件的每个区域在生产中也是相同的 这是JQueryC# ASP.Net WebForms Ajax序列化类型为';System.Reflection.Module';,c#,jquery,asp.net,ajax,webforms,C#,Jquery,Asp.net,Ajax,Webforms,我正在使用一个ASP.NETWebForms项目,并且正在使用JQuery发布数据,并在输入数据之后从数据库中返回true或false结果 我必须强调,这可以在本地和测试服务器上工作,但不能在生产环境中工作 我需要在测试和本地更改的web配置文件的每个区域在生产中也是相同的 这是JQuery $("#bttnSave").click(function () { $("#successAlert").hide(); $("#errorAlert").hide(); $(
$("#bttnSave").click(function () {
$("#successAlert").hide();
$("#errorAlert").hide();
$(this).hide();
var div = "#action";
$(div).hide();
$("#saving").show();
var singleV = 0.00;
var annualVal = 0.00;
var quarterlyVal = 0.00;
var cover = $('#ddlCoverTypes :selected').val();
if ($("#txtSinglePaymentValue").val() !== "") {
singleV = parseFloat($("#txtSinglePaymentValue").val());
}
if ($("#txtAnnualPaymentValue").val() !== "") {
annualVal = parseFloat($("#txtAnnualPaymentValue").val());
}
if ($("#txtQuarterlyPaymentValue").val() !== "") {
quarterlyVal = parseFloat($("#txtQuarterlyPaymentValue").val());
}
var jsonObject = {
coverType: cover,
singleVaL: singleV.toFixed(2),
annual: annualVal.toFixed(2),
quarterly:quarterlyVal.toFixed(2),
csvStrMarkets:$("#ddlMarkets").val()
};
var url = "EQS690.aspx/BulkSaveMarketRates";
var errorCode = "BLK-MKT-UPDT";
console.log(jsonObject);
setTimeout(
function () {
ajaxCall(url, jsonObject, errorCode, div, "#bttnSave");
}, 1000);
});
function ajaxCall(appUrl, jsonObject, errorCode, div, button) {
$.ajax({
type: "POST",
url: appUrl,
data: JSON.stringify(jsonObject),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (result) {
$("#saving").hide();
$(div).show();
$(button).show();
$("#successAlert").show();
$("#errorAlert").hide();
return true;
},
error: function (result) {
console.log(result);
var json = $.parseJSON(result.responseText);
$("#lblError").html(
"Something went wrong with saving your changes. If the problem continues please report the issue to the system administrator. <br/><br/>When reporting the issue please give error code <br/><b>" +
errorCode + ": " + json.Message + "</b>");
$("#saving").hide();
$(div).show();
$(button).show();
$("#successAlert").hide();
$("#errorAlert").show();
return result;
}
});
}
$(“#bttnSave”)。单击(函数(){
$(“#successAlert”).hide();
$(“#errorAlert”).hide();
$(this.hide();
var div=“#action”;
$(div.hide();
$(“#保存”).show();
var-singleV=0.00;
var annualVal=0.00;
var quarterlyVal=0.00;
var cover=$('#ddlCoverTypes:selected').val();
if($(“#txtSinglePaymentValue”).val()!==“”){
singleV=parseFloat($(“#txtSinglePaymentValue”).val();
}
如果($(“#txtanualpaymentvalue”).val()!=“”){
annualVal=parseFloat($(“#txtanualpaymentvalue”).val();
}
if($(“#txtQuarterlyPaymentValue”).val()!=“”){
quarterlyVal=parseFloat($(“#txtQuarterlyPaymentValue”).val();
}
var jsonObject={
封面,
singleVaL:singleV.toFixed(2),
年度:每年固定(2),
季度:季度固定值(2),
csvStrMarkets:$(“#ddlMarkets”).val()
};
var url=“EQS690.aspx/BulkSaveMarketRates”;
var errorCode=“BLK-MKT-UPDT”;
log(jsonObject);
设置超时(
函数(){
ajaxCall(url、jsonObject、错误代码、div,“#bttnSave”);
}, 1000);
});
函数ajaxCall(appUrl、jsonObject、errorCode、div、button){
$.ajax({
类型:“POST”,
url:appUrl,
数据:JSON.stringify(jsonObject),
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
成功:功能(结果){
$(“#保存”).hide();
$(div.show();
$(按钮).show();
$(“#successAlert”).show();
$(“#errorAlert”).hide();
返回true;
},
错误:函数(结果){
控制台日志(结果);
var json=$.parseJSON(result.responseText);
$(“#lblError”).html(
“保存更改时出现问题。如果问题仍然存在,请向系统管理员报告问题。
报告问题时,请提供错误代码
”+
错误代码+”:“+json.Message+”);
$(“#保存”).hide();
$(div.show();
$(按钮).show();
$(“#successAlert”).hide();
$(“#errorAlert”).show();
返回结果;
}
});
}
这是.Net代码
[ScriptMethod]
[System.Web.Services.WebMethod]
public static object BulkSaveMarketRates(string coverType, decimal singleVaL, decimal annual, decimal quarterly, List<string> csvStrMarkets)
{
var listOfParams = new List<SqlParameter>();
var coverParam = new SqlParameter("@CoverType", SqlDbType.Char);
var singleParam = new SqlParameter("@Single", SqlDbType.Decimal);
var annualParam = new SqlParameter("@Annual", SqlDbType.Decimal);
var quarterlyParam = new SqlParameter("@Quarterly", SqlDbType.Decimal);
var marketsParam = new SqlParameter("@Markets", SqlDbType.VarChar);
coverParam.Value = coverType;
singleParam.Value = singleVaL;
annualParam.Value = annual;
quarterlyParam.Value = quarterly;
var sb = new StringBuilder();
foreach (var market in csvStrMarkets)
{
sb.Append($"{market}, ");
}
marketsParam.Value = sb.ToString().Trim().TrimEnd(',');
listOfParams.Add(coverParam);
listOfParams.Add(singleParam);
listOfParams.Add(annualParam);
listOfParams.Add(quarterlyParam);
listOfParams.Add(marketsParam);
return InsertOrUpdateRecord(listOfParams, "sp_UpdateMarketParametersAdminFee", false);
}
[ScriptMethod]
[System.Web.Services.WebMethod]
公共静态对象BulkSaveMarketRates(字符串coverType、decimal singleVaL、decimal annual、decimal quarterly、List csvStrMarkets)
{
var listOfParams=新列表();
var coverParam=newsqlparameter(“@CoverType”,SqlDbType.Char);
var singleParam=新的SqlParameter(“@Single”,SqlDbType.Decimal);
var annualParam=新的SqlParameter(“@Annual”,SqlDbType.Decimal);
var quarteryParam=新的SqlParameter(“@Quarterly”,SqlDbType.Decimal);
var marketsParam=新的SqlParameter(“@Markets”,SqlDbType.VarChar);
coverParam.Value=coverType;
singleParam.Value=singleVaL;
年参数值=年;
季度参数值=季度;
var sb=新的StringBuilder();
foreach(csvStrMarkets中的var市场)
{
某人追加($“{market},”);
}
marketsParam.Value=sb.ToString().Trim().TrimEnd(',');
添加参数列表(coverParam);
添加(singleParam);
添加参数列表(年度参数);
参数列表。添加(四分之一参数);
添加(marketsParam)的参数列表;
返回InsertOrUpdateRecord(参数列表,“sp_UpdateMarketParametersAdminFee”,false);
}
这就是我得到的错误
序列化“System.Reflection.Module”类型的对象时检测到循环引用
我认为返回类型对象有一些不适合序列化的地方。此时未序列化webmethod返回的对象。你可以试试这个-
return new JavaScriptSerializer().Serialize(new { errMsg = "test" });
为此,必须包含System.Web.Script.Serialization
。这样,返回对象中的结果将被序列化,javascript中的这一行将很好地接收到结果-
var json = $.parseJSON(result.responseText);
我现在会尝试,但它回避了一个问题:为什么它会在本地和测试中工作?我假设您在本地和测试机器的bin文件夹中有Newtonsoft.Json.dll?您是否也在生产中使用了它?@Coolshaw将我的代码更改为此,并将其应用到测试中,现在复制了我在live中遇到的问题,但在本地环境中工作得非常好现在在测试中工作,完全刷新使其工作。我将把这篇文章发布到制作部,看看它是如何将它传递给出版部的,并在大约15分钟后知道它是否成功