我有一个在 razor c# 中定义的函数 Convert(string name)
。
接下来,我有一个 jquery 数据表,其中第一行包含一个超链接。问题是我需要在 jquery 数据表中调用这个 C# 函数。
"render": function (data, type, row, meta) {
return '<a href="/Home/Detail?search=' + row.Id + '">'
我想在 jquery 数据表中调用此 C# Convert(string name)
函数,如下所示:
"render": function (data, type, row, meta) {
return '<a href="/Home/Detail?search=' + @Check(row.Id) + '">
但它没有按预期工作。有人可以帮忙吗?
最佳答案
当然,您不能像这样将客户端变量直接传递给服务器端方法:
"render": function (data, type, row, meta) {
return '<a href="/Home/Detail?search=' + @Check(row.Id) + '">'
}
其背后的原因是因为所有服务器端代码都会在页面加载后立即执行,之后只保留客户端脚本。您需要使用 JsonResult
或 Web API 方法并创建一个 JS 函数,以使用 jQuery.ajax()
进行 AJAX 回调(使用 GET
或 POST
方法(具体取决于您的选择)并返回转换结果。
以下是两种方式的示例:
1) 使用 AJAX 回调和 JsonResult
JS
function check(rowId) {
var rid = { name: rowId };
$.post('@Url.Action("Convert", "ControllerName")', rid).done(function (result) {
// do something
return result;
}).fail(function (jqxhr, textStatus, err) {
// error handling
});
}
Controller
[HttpPost]
public JsonResult Convert(string name)
{
// do something
return Json(result);
}
2) 通过 Web API 使用 AJAX 回调(即 ApiController
)
JS
function check(rowId) {
var rid = { name: rowId };
$.post('api/Convert', rid).done(function (result) {
// do something
return result;
}).fail(function (jqxhr, textStatus, err) {
// error handling
});
}
Web API Controller
[HttpPost]
public IHttpActionResult Convert(string name)
{
// do something
return new JsonResult<string>(result);
}
两种方法在render
部分具有相同的实现,只需调用check
函数并传递row.Id
作为参数:
数据表
"render": function (data, type, row, meta) {
return '<a href="/Home/Detail?search=' + check(row.Id) + '">';
}
注意:上面基于 JS 的 check
函数应在 DataTable
定义之外声明。
关于javascript - 将 JavaScript 变量传递给 jQuery DataTable 中的 razor 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51490495/