使用Ajax,MVC 3返回局部视图

时间:2014-05-09 17:42:45

标签: javascript jquery ajax asp.net-mvc asp.net-mvc-3

首先让我说我觉得这个网站是天赐之物,我非常感谢所有我学到的东西。我有一个MVC3组件,我正在使用。我想填充一个选择列表,当用户选择其中一个选项时,我想要加载一个显示数据的局部视图。到目前为止一切都有效,除了我错过了刷新局部视图的部分。当页面最初加载时,我在代码中看到空容器。我没有得到JS错误,Firebug显示返回的格式正确的HTML。那么我缺少哪些操作部分来刷新页面上的局部视图?请提前通知和thanx。

观点:

    <tr>
  <th>Select a User to view their Roles:</th>
  <td><%=  Html.DropDownList("UserListForRoleView", list, "Please choose a User")%></td>
</tr>
<tr>
   <td>
      <% Html.RenderPartial("ViewUsersInRole");%>
    </td>
 </tr>

$(document).ready(function () {
  $('#UserListForRoleView').change(function () {
     var selectedID = $(this).val();
     $.get('/UserAdminRepository/ViewUsersInRole/?user=' + selectedID)
    });
 }); 

控制器:

   public ActionResult ViewUsersInRole()
    {
        string user = Request["user"];
        string[] selectedRoles = Roles.GetRolesForUser(user);
        List<string> data = new List<string>(); 
        if (selectedRoles.Length > 0)
        {
            data = selectedRoles.ToList<string>();
        }
        else
        {
            data.Add("No data found");
        }

        ViewData["UsersinRole"] = data;

        return PartialView("ViewUsersInRole");
    }

PartialView(完整版):

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
  <ul>
<%    
   List<string> list = ViewData["UsersinRole"] as List<string>;
   if (list != null && list.Count > 0)
   {
        foreach (string item in list)
      { %>
        <li><%: item %></li>
     <% }
   }
%>
</ul> 

enter image description here

2 个答案:

答案 0 :(得分:0)

td中添加html,如下所示:

<td id="partialcontainer">
  <% Html.RenderPartial("ViewUsersInRole");%>
</td>

并在其中附加html:

$(document).ready(function () {
   $('#UserListForRoleView').change(function () {
       var selectedID = $(this).val(); 
    $.get('/UserAdminRepository/ViewUsersInRole/?user=' +  selectedID,function(response){

     $('#partialcontainer').html(response); 
          })
         });                            
       });

稍微改进的代码,始终使用Url.Action生成网址:

$(document).ready(function () {

$('#UserListForRoleView').change(function () {

var selectedID = $(this).val();

var url = '@Url.Action("ViewUsersInRole","UserAdminRepository")';

url+"?user="+selectedID;

$.get(url,function(response){

$('#partialcontainer').html(response);

 });

 });

 });

我修改了一些代码,使其更清晰,更易读。

答案 1 :(得分:0)

尝试使用RenderAction

<% Html.RenderAction("ViewUsersInRole");%>