У меня есть представление, которое имеет флажки, позволяющие администратору удалить возможность пользователя загружать данный файл. Я хочу изменить базовое пользовательское свойство CanDownloadA
/CanDownloadB
, когда администратор изменит этот флажок. На мой взглядИмя метода динамического контроллера в Java Script MVC
<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"),
) не работает? - userName имеет значение null при передаче контроллеру, почему?
Спасибо за ваше время.
Редактировать. Задача 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>
и код CheckBox:
<td>@Html.CheckBoxFor(modelItem => item.CanDownloadUserCost.Value,
new { data_item = item.UserName, data_action = "EditUserCostAccess"})</td>
Но это не работает.
Это решило 1, но создание URL-адреса не работает. Любые идеи почему? – MoonKnight
@ Killercam Я не понимаю: создание URL-адреса было вашим 1-м пунктом, нет? –
Простите, да, вторая точка решена, первая - нет. Я отредактирую вопрос ... – MoonKnight