ASP.NET MVC中Ajax向控制器传参时TransactionNumber未定义问题
问题分析与解决
你遇到的问题根源有两个:
- 点击按钮调用
get_details时,只传了id,没传TransactionNumber,导致函数第二个参数未定义 - URL里的参数格式错误,控制器接收的参数是
TN,但你写的是?=,没有指定参数名
修正步骤:
1. 前端DataTables按钮渲染部分
render函数除了当前列的data(也就是id),还能拿到整行数据的full参数,用它获取TransactionNumber,然后传给get_details:
{ data: "id", "render" : function(data, type, full) { return '<button class="btn btn-success" onclick="get_details(' + data + ', \'' + full.TransactionNumber + '\')"> Details </button>'; } }
注意给TransactionNumber加单引号,避免字符串类型值引发语法错误。
2. 修正get_details函数的URL参数
把?=改成?TN=,和控制器的参数名TN对应:
function get_details(id, TransactionNumber) { window.location.href = '/Approver/Details/' + id + '?TN=' + TransactionNumber; }
3. 控制器参数优化(可选)
可以给参数添加[FromQuery]特性,明确指定从URL查询字符串获取参数,逻辑更清晰:
public ActionResult Details(int Id, [FromQuery]string TN) { tbl_FSEWeb_Transaction tbl_FSEWeb_Transaction = db.tbl_FSEWeb_Transaction.Find(Id); return View(tbl_FSEWeb_Transaction); }
修改完成后,TransactionNumber就能正确传递到控制器的TN参数中了。
内容的提问来源于stack exchange,提问作者bran.tyler
相关产品推荐
相关产品推荐

