2017-05-30 83 views
0

我想将两个路由值传递给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 

回答

0

您需要发送POST请求ChangeUserRole行动。您可以使用具有currentMemberroleId值的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>

相关问题