我准备并填充了两个列表(list-left和list-right)。然后,我有此JS代码将元素从一个列表移动到另一个列表。而且效果很好。
$(function () {
$('body').on('click', '.list-group .list-group-item', function () {
$(this).toggleClass('active');
});
$('.list-arrows button').click(function () {
var $button = $(this), actives = '';
if ($button.hasClass('move-left')) {
actives = $('.list-right ul li.active');
actives.clone().appendTo('.list-left ul');
actives.remove();
} else if ($button.hasClass('move-right')) {
actives = $('.list-left ul li.active');
actives.clone().appendTo('.list-right ul');
actives.remove();
}
});
});
但是说实话,当用户单击表单上的“提交”按钮时,我不知道如何将结果传递回代码隐藏?
这是我的cshtml代码:
@using AuthDatabase.Entities
@using Identity.Models
@model RoleEdit
@{
ViewData["Title"] = "Edit role";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h1>@ViewData["Title"]</h1>
<br />
<h4>Roles</h4>
<hr />
<div asp-validation-summary="All" class="text-danger"></div>
<form method="post">
<input type="hidden" name="roleName" value="@Model.Role.Name" />
<input type="hidden" name="roleId" value="@Model.Role.Id" />
<div class="row">
<div class="dual-list list-left col-md-5">
<h5>No roles</h5>
<div class="well text-right">
<div class="row">
<div class="col-md-10">
<div class="input-group">
<span class="input-group-addon glyphicon glyphicon-search"></span>
<input type="text" name="SearchDualList" class="form-control" placeholder="search" />
</div>
</div>
</div>
<ul class="list-group">
@foreach (AppUser user in Model.NonMembers)
{
<li class="list-group-item">@user.UserName</li>
}
</ul>
</div>
</div>
<div class="list-arrows col-md-1 text-center">
<button class="btn btn-default btn-sm move-left" type="button">
<span class="btn btn-primary"><</span>
</button>
<button class="btn btn-default btn-sm move-right" type="button">
<span class="btn btn-primary">></span>
</button>
</div>
<div class="dual-list list-right col-md-5">
<h5>With roles</h5>
<div class="well">
<div class="row">
<div class="col-md-10">
<div class="input-group">
<input type="text" name="SearchDualList" class="form-control" placeholder="search" />
<span class="input-group-addon glyphicon glyphicon-search"></span>
</div>
</div>
</div>
<ul class="list-group">
@foreach (AppUser user in Model.Members)
{
<li class="list-group-item">@user.UserName</li>
}
</ul>
</div>
</div>
</div>
<br />
<a asp-action="Index" class="btn btn-secondary">Back to List</a>
<button type="submit" class="btn btn-primary">Save</button>
</form>
@section Scripts
{
<script src="~/js/lists.js" asp-append-version="true"></script>
}
而我的控制器:
public async Task<IActionResult> Edit(string id)
{
IdentityRole role = await _roleManager.FindByIdAsync(id);
List<AppUser> members = new List<AppUser>();
List<AppUser> nonMembers = new List<AppUser>();
foreach (AppUser user in _userManager.Users)
{
var list = await _userManager.IsInRoleAsync(user, role.Name) ? members : nonMembers;
list.Add(user);
}
return View(new RoleEdit
{
Role = role,
Members = members,
NonMembers = nonMembers
});
}
[HttpPost]
public async Task<IActionResult> Edit(RoleModification model)
{
IdentityResult result;
if (ModelState.IsValid)
{
foreach (string userId in model.AddIds ?? new string[] { })
{
AppUser user = await _userManager.FindByIdAsync(userId);
if (user != null)
{
result = await _userManager.AddToRoleAsync(user, model.RoleName);
if (!result.Succeeded)
Errors(result);
}
}
foreach (string userId in model.DeleteIds ?? new string[] { })
{
AppUser user = await _userManager.FindByIdAsync(userId);
if (user != null)
{
result = await _userManager.RemoveFromRoleAsync(user, model.RoleName);
if (!result.Succeeded)
Errors(result);
}
}
}
if (ModelState.IsValid)
return RedirectToAction(nameof(Index));
else
return await Edit(model.RoleId);
}
[HttpPost] Edit操作要求RoleModification对象具有两个字符串数组(对列表进行更改->现在基于以前的解决方案,没有jquery)。仅通过一个列表权限也是合适的。
public class RoleModification
{
[Required]
public string RoleName { get; set; }
public string RoleId { get; set; }
public string[] AddIds { get; set; }
public string[] DeleteIds { get; set; }
}
$('#submitBtn').on('click', function () {
let addIds = [];
$('.list-right ul li').each(function (index) {
addIds.push($(this).text());
});
ajaxSubmit(addIds);
});
});
function ajaxSubmit(input){
$.ajax({
url:'/controller/action',
method:'POST',
data:input --- or {input}
success:function(){
console.log('success');},
error:function(x,y,z){
console.log(x,y,z)};}
});
}
和您的控制器muset像这样
public ActionResult Edit(List<string> input)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句