超全模态模型 × Harness 升级,升级解锁 ArkClaw,最新支持 DeepSeek-V4 系列与 GLM-5.1
我之前踩过一模一样的坑!你现在遇到的问题根源在于:复杂集合类型(比如List<SqlParameter>)没办法通过Url参数的方式被ASP.NET Core的模型绑定正确解析,而且Post请求本来就更适合把复杂数据放在请求体里传递,而不是拼在Url上。下面给你一步步的解决方案:
List<SqlParameter>
首先,你可以把query和sqlParameters封装到一个模型里(其实你已经有ContactHomePage了),这样Action参数更整洁,也方便模型绑定:
query
sqlParameters
ContactHomePage
public async Task<IActionResult> GetRecords(JqGridRequest request, ContactHomePage model) { }
如果不想改现有Action参数也没关系,后面的Ajax写法稍微调整就行。
SqlParameter
直接序列化SqlParameter这个系统类型很容易出问题——它有很多内部属性,序列化后不仅冗余,还可能导致模型绑定失败。建议自定义一个Dto来传递你需要的属性:
public class SqlParameterDto { public string ParameterName { get; set; } public object Value { get; set; } public DbType DbType { get; set; } // 其他你需要的属性,比如Size、Direction等 }
然后在你的ContactHomePage里把List<SqlParameter>换成List<SqlParameterDto>,或者在视图里把原模型的SqlParameters映射成Dto集合。
List<SqlParameterDto>
SqlParameters
核心要点是:把数据放在请求体里,用JSON格式传递,并且设置contentType: 'application/json'。
contentType: 'application/json'
// 先准备要传递的数据 var postData = { // 如果是jqGrid的请求,这里的request可以直接用jqGrid自带的参数,或者根据你的需求构造 request: {}, // 传递你的查询参数和Sql参数集合 query: '@Model.Query', sqlParameters: @Html.Raw(Json.Serialize(Model.SqlParameters.Select(p => new { p.ParameterName, p.Value, p.DbType }))) }; // 发送Ajax请求 $.ajax({ url: '@Url.Action("GetRecords", "Contact")', type: 'POST', contentType: 'application/json; charset=utf-8', data: JSON.stringify(postData), success: function(response) { // 处理返回的结果,比如更新jqGrid数据 // $("#gridId").jqGrid('setGridParam', { data: response }).trigger('reloadGrid'); }, error: function(xhr, status, error) { console.error('请求出错:', error); } });
@Html.Raw(Json.Serialize(...))
JSON.stringify(postData)
如果用了自定义的SqlParameterDto,在Action里把Dto转成真正的SqlParameter即可:
SqlParameterDto
var realSqlParams = sqlParameters.Select(dto => new SqlParameter(dto.ParameterName, dto.Value) { DbType = dto.DbType // 其他属性按需设置 }).ToList();
Url参数只能传递简单类型(字符串、数字等),对于List<SqlParameter>这种复杂集合,ASP.NET Core的模型绑定无法正确解析Url里的参数格式——哪怕你把集合拼到Url上,也会因为参数结构太复杂导致绑定失败。而Post请求的请求体是专门用来传递复杂数据的,用JSON格式传递是最可靠的方式。
内容的提问来源于stack exchange,提问作者Jourmand
超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起
模型再升级,30秒超长叙事, 模态参考扩容
模型自由,工具不限,最新支持 Deepseek-V4 系列、GLM-5.3 系列
超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列
大模型19元起,Al应用9.9元畅享,新人首购爆款尽享优惠