Java 脚本 MVC 中的动态控制器方法名称
本文关键字:控制器 方法 动态控制 动态 脚本 MVC Java | 更新日期: 2023-09-27 18:32:18
我有一个视图,其中包含允许管理员删除用户下载给定文件的能力的复选框。我想在管理员更改复选框时更改基础用户属性CanDownloadA
/CanDownloadB
。我的观点是
<table class="table">
<tr>
<th>Username</th>
<th>Email Addres</th>
<th>UserCost Access</th>
<th>DrGroup Access</th>
<th>Last Login</th>
</tr>
@{
if (Model != null)
{
foreach (var item in Model.UserList)
{
<tr>
<td>@Html.DisplayFor(modelItem => item.UserName)</td>
<td>@Html.DisplayFor(modelItem => item.EmailAddress)</td>
<td>@Html.CheckBoxFor(modelItem => item.CanDownloadA.Value,
new { data_item = item.UserName, action = "EditAAccess"})</td>
<td>@Html.CheckBoxFor(modelItem => item.CanDownloadB.Value,
new { data_item = item.UserName, action = "EditBAccess" })</td>
<td>@Html.DisplayFor(modelItem => item.LastLoginDateTime)</td>
<td>
@Ajax.ActionLink(
"Remove",
"UpdateUserInfo",
"Tools",
new
{
userName = item.UserName
},
new AjaxOptions
{
HttpMethod = "GET"
},
new { onclick = "return confirm('Are you sure you wish to delete user?');" })
</td>
</tr>
}
}
}
</table>
...
<script>
$(function () {
$("input[type=checkbox]").click(function () {
var data_item = $(this).data("userName");
$.ajax({
url: 'Tools/' + $(this).data("action"),
type: 'POST',
data: { userName: data_item, isChecked: $(this).is(':checked') },
success: function (result) {
}
});
});
});
</script>
如果脚本正在调用相应的控制器方法,则
[HttpPost]
[AllowAnonymous]
public async Task<ActionResult> EditUserCostAccess(
string userName, bool isChecked)
{
return await EditAccess(userName, isChecked, DownloadType.UserCost);
}
或
[HttpPost]
[AllowAnonymous]
public async Task<ActionResult> EditDrGrouptAccess(
string userName, bool isChecked)
{
return await EditAccess(userName, isChecked, DownloadType.DrGroup);
}
如果我从复选框中删除action = "EditBAccess"
HtmlParameters
并写入
url: 'Tools/EditDrGrouptAccess',
在 JQuery 脚本中,将触发相应的方法。但是,我不想有两个脚本来触发每个方法,所以我编写了不起作用url: 'Tools/' + $(this).data("action"),
。
- 为什么我的JavaScript函数(特定
url: 'Tools/' + $(this).data("action"),
)不起作用? - 用户名在传递给控制器时为空,为什么?
谢谢你的时间。
问题 2 已由下面的 @Samuel Caillerie 解决。但是 1.莫。我已将脚本更改为
<script>
$(function () {
$("input[type=checkbox]").click(function () {
var data_item = $(this).data("item");
var data_action = $(this).data("action");
$.ajax({
url: 'Tools/' + data_action,
type: 'POST',
data: { userName: data_item, isChecked: $(this).is(':checked') },
success: function (result) {
}
});
});
});
</script>
和复选框代码:
<td>@Html.CheckBoxFor(modelItem => item.CanDownloadUserCost.Value,
new { data_item = item.UserName, data_action = "EditUserCostAccess"})</td>
但这行不通。
对于你的第一点,我认为这只是你的代码中的一个错误:
<td>@Html.CheckBoxFor(modelItem => item.CanDownloadA.Value,
new { data_item = item.UserName, data_action = "EditAAccess"})</td>
<td>@Html.CheckBoxFor(modelItem => item.CanDownloadB.Value,
new { data_item = item.UserName, data_action = "EditBAccess" })</td>
(你必须放data_action
而不是action
)。
对于第二点,在 js 中将userName
更改为 item
:
var data_item = $(this).data("item");
或者将传递给复选框的属性的名称更改为 data_userName
...