从视图传递一个路由值,并从javascript传递一个路由值到asp.net中的动作mvc
问题描述:
我想将两个路由值传递给ChangeUserRole动作。一个来自View,它是currentMember作为成员,另一个是currentMember的roleId,它在下拉列表中更改。我知道我可以使用Ajax做到这一点,但无法弄清楚。请帮我解决一下这个。从视图传递一个路由值,并从javascript传递一个路由值到asp.net中的动作mvc
操作:
<HttpPost>
Function ChangeUserRole(currentMember As ApplicationUser, roleId As String) As ActionResult
Dim roleName = db.Roles.Find(roleId).Name
Dim currentMemRole = db.Roles.Find(currentMember.Id).Name
Roles.RemoveUserFromRole(currentMember.Id, currentMemRole)
Roles.AddUserToRole(currentMember.Id, roleName)
Return RedirectToAction("Users")
End Function
查看:
@Imports Microsoft.AspNet.Identity
@ModelType IEnumerable(Of EntityFramework.IdentityRole)
@Code
ViewData("Title") = "Users"
Layout = "~/Views/Shared/_AdminLayout.vbhtml"
Dim context = New ApplicationDbContext
Dim allUsers = context.Users.ToList
Dim selectList = New List(Of SelectListItem)
End Code
<h2>List of Users</h2>
<table class="table table-bordered table-responsive table-striped">
<tr>
<th>Name</th>
<th>Username</th>
<th>Email</th>
<th>Role</th>
<th></th>
</tr>
<tr>
@For Each member In allUsers
Dim MemberRole = member.Roles.FirstOrDefault(Function(m) m.UserId = member.Id)
For Each role In Model
selectList.Add(New SelectListItem With {
.Text = role.Name,
.Value = role.Id,
.Selected = (role.Id = MemberRole.RoleId)
})
Next
@<text>
<td></td>
<td>@member.UserName</td>
<td>@member.Email</td>
<td>@Html.DropDownList("allRoles", selectList, New With {.class = "form-control"})</td>
<td>
@Using Html.BeginForm("ChangeUserRole", "Admin", New With {.currentMember = member, .roleId = **userRoleId**}, FormMethod.Post, New With {.class = "form"})
@<input type="submit" value="Save" class="btn btn-primary" />
End Using
</td>
</text>
Next
</tr>
</table>
<div class="row">
<div class="col-md-6">
@Html.Partial("_CreateRole")
</div>
</div>
的JavaScript:
@Section Scripts
<script>
$(document).ready(function() {
var **userRoleId** = "";
$("#allRoles").on("change", function() {
userRoleId = $(this).val();
});
});
</script>
End Section
答
您需要发送POST请求ChangeUserRole
行动。您可以使用具有currentMember
和roleId
值的HTML <form>
元素,并使用submit()方法在change
事件处理程序中发送此值。例如
$("#myform").on('change', function() {
this.submit();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="myform" action="https://stackoverflow.com/users/8084795/rohit-bhati" method="POST">
<select name="tab">
<option value="">Select Tab</option>
<option value="profile">profile</option>
<option value="topactivity">activity</option>
</select>
</form>
如果输入(或选择)位于外形式,使用form
attribute结合它们:
$("[name=tab]").on('change', function() {
this.form.submit();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="myform" action="https://stackoverflow.com/users/8084795/rohit-bhati" method="POST">
</form>
<select name="tab" form="myform">
<option value="">Select Tab</option>
<option value="profile">profile</option>
<option value="topactivity">activity</option>
</select>