2015-10-29 60 views
1

我在选择菜单的Html部分视图没有得到更新,而返回更新的部分视图。我错过了什么?

@using (Html.BeginForm("userrights", "Users", FormMethod.Post, new { @class = "form-horizontal", role = "form", @id = "userrights_frm", @name = "userrights_frm" })) 
    { 
     <div class="form-group"> 
      <div class="col-md-7" style="padding-right:10px"> 
       @Html.TextBoxFor(m => m.firstname, new { @class = "form-control", @id = "firstname", @name = "firstname", @placeholder = "Serach By User Name" }) 
       @Html.HiddenFor(m => m.id, new { @class = "form-control", @id = "id", @name = "id" }) 
      </div> 
      <div class="col-sm-2"> 
       <button type="submit" id="btn_search" value="Search" name="btn_search" class="btn btn-default">Search</button> 
      </div> 
      <div class="clearfix"></div> 
     </div> 
     <div class="form-group"> 
      <div class="col-md-1" style="padding-top:7px"> Select Top Link </div> 
      <div class="col-sm-6"> 
       @Html.DropDownList("selectedMenu", Model._menu.Select(menu => new SelectListItem { Text = menu.menuname, Value = menu.menuid.ToString() }), "Select Menu", new { @class = "form-control" }) 
      </div> 
      <div class="clear"></div> 
     </div> 
     @Html.Partial("_userRightPartial", Model._UserRightPartialView) 
     <div class="clear"></div> 
    } 

AjaxMethod改变

$("#selectedMenu").change(function() { 
       mnid = $(this).val(); 
       userId = $("#userid").val(); 
       $.ajax({ 
        type: 'POST', 
        url: "/Users/getsubmenus", 
        data: "{userid:'" + userId + "',menuid:'" + mnid + "'}", 
        contentType: "application/json; charset=utf-8", 
        dataType: 'json', 
        success: function (data) { 
         if (data.result == "Error") { 
          alert(data.message); 
         } 
        } 
       }); 

      }); 

操作结果称为Ajax “的getsubmenus”

public ActionResult getsubmenus(string userid, string menuid) 
     {    
      userright _userright = new userright(); 
      user _user = _ftwCommonMethods.GetuserDataById(Convert.ToInt32(userid)); 
      UserRightPartialView _UserRightPartialView = new UserRightPartialView(); 
      if (_user!=null) 
      { 
       IEnumerable<SubMenuListModel> _SubMenuListModel = _ftwCommonMethods.GetSubMenuItemsByMenu(_user.id.ToString(), menuid); 

       _UserRightPartialView.firstname = _user.firstname; 
       _UserRightPartialView.userid = _user.id; 
       _UserRightPartialView._SubMenuListModel = _SubMenuListModel; 
      } 
      return PartialView("_userRightPartial", _UserRightPartialView); 
     } 

的ActionResult当我点击搜索按钮

 [HttpPost] 
     [AuthorizeUser] 
     public ActionResult userrights(FormCollection form_collection) 
     { 
      IEnumerable<MenuListModel> _MenuListModel = _ftwCommonMethods.GetMenuItems(); 
      int userid = 0; 
      if (!string.IsNullOrEmpty(form_collection["id"].ToString()) && form_collection["id"].ToString() != "0") 
      { 
       userid = Convert.ToInt32(form_collection["id"].ToString()); 
      } 
      user _user = _ftwCommonMethods.GetuserDataById(userid); 
      UserRightViewSearch _UserRightViewSearch = new UserRightViewSearch(); 
      _UserRightViewSearch._menu = _MenuListModel; 
      if (_user != null) 
      { 
       IEnumerable<SubMenuListModel> _SubMenuListModel = _ftwCommonMethods.GetSubMenuItems(_user.id.ToString()); 
       UserRightPartialView _UserRightPartialView = new UserRightPartialView(); 
       _UserRightPartialView.firstname = _user.firstname; 
       _UserRightPartialView.userid = _user.id; 
       _UserRightViewSearch.id = _user.id; 
       _UserRightPartialView._SubMenuListModel = _SubMenuListModel; 
       _UserRightViewSearch._UserRightPartialView = _UserRightPartialView; 
      } 
      else 
      { 
       ViewData["message"] = "User Not Found."; 
      } 
      return View(_UserRightViewSearch); 

     } 

管窥

@model FTW_Admin.Models.UserRightPartialView 

@if (Model.firstname != null) 
{ 
    <div class="dhe-example-section" id="ex-1-2"> 
     <div id="example-1-2"> 
      <div class="col-md-6" style="padding:0px 10px 10px 0px"> 
       <div class="drag_to">@Model.firstname 
        @Html.Hidden("userid", Model.userid, new { @id = "userid" }) 
       </div> 
       <div class="middle_section"> 
        <div class="inner_section_page_sec"> 
         <div id="container" class="main_page_area"> 
          <div class="column left first"> 
           <div> 
            <ul class="sortable-list-allow"> 

              @foreach (var row in Model._SubMenuListModel) 
              { 
               if (row.allowd) 
               { 
                <li class="sortable-item loop_content"> 
                 <table id="dragable_grid"> 
                  <tr> 
                   <th style="color:#000"> 
                    @row.submenuname 
                    @Html.Hidden("submenuid", @row.submenuid, new { @id = "submenuid" }) 
                    @Html.Hidden("menuid", @row.submenuid, new { @id = "menuid" }) 

                   </th> 
                   <th class="heading_style_a" style="text-align:right"><span class="allowedSpan"> Allowed</span></th> 
                  </tr> 
                 </table> 
                </li> 
               } 
              } 

            </ul> 
            <div class="clear"></div> 
           </div> 
          </div> 
          <div class="clear"></div> 
         </div> 
        </div> 
       </div> 
      </div> 
      <div class="col-md-6" style="padding:0px 10px 10px 0px"> 
       <div class="drag_to">Drag and Drop section to home screen section</div> 
       <div class="inner_section_page_sec"> 
        <div class="main_page_area"> 
         <div id="container"> 
          <div class="column left"> 
           <ul class="sortable-list-disallow"> 

             @foreach (var row in Model._SubMenuListModel) 
             { 
              if (!row.allowd) 
              { 
               <li class="sortable-item loop_content"> 
                <table id="dragable_grid"> 
                 <tr> 
                  <th style="color:#000"> 
                   @row.submenuname 
                   @Html.Hidden("submenuid", @row.submenuid, new { @id = "submenuid" }) 
                   @Html.Hidden("menuid", @row.submenuid, new { @id = "menuid" }) 
                  </th> 
                  <th class="heading_style_a" style="text-align:right"><span class="allowedSpan">Denied</span></th> 
                 </tr> 
                </table> 
               </li> 
              } 
             } 

           </ul> 
          </div> 
         </div> 
         <div class="clear"></div> 
        </div> 
       </div> 
      </div> 
      <div class="clear"></div> 
     </div> 
    </div> 


} 

的事情是,当我搜索记录我得到了局部视图的所有子菜单项开始。然后我想要做的是当我选择特定的菜单链接下拉部分视图应该只更新所选菜单的子菜单

+1

你需要停止可怕的使用尝试覆盖'id'和'name'属性具有完全相同的值,他们已经是我在上一个问题中提到的('new + @ name =“ ..“'甚至不起作用)。你可以在ajax选项中指定'dataType:'json',但你实际返回的html('PartialView'),所以它会失败。将其更改为'数据类型:“HTML”,'并以'URL:“@ Url.Action(‘getsubmenus’,‘用户’)”,'以确保您的网址是正确生成 –

+0

您也有其他问题的局部视图因为您的'foreach'循环中的控件正在生成重复的'name'属性而没有索引器,所以不会绑定到模型及其由于重复的'id'属性而生成无效的html。您需要使用'for'循环或自定义'EditorTemplate' –

+0

删除重复的ID和名称,但没有用..不工作 – Atul

回答

1

您的ajax函数指定返回类型json,但您调用一个控制器方法返回一个视图。然后在成功回调中,您可以参考不存在的result属性。相反,您需要使用返回的局部视图更新DOM。另外,不需要将传递给控制器​​的数据串联起来。你的脚本应该

$("#selectedMenu").change(function() { 
    mnid = $(this).val(); 
    userId = $("#userid").val(); 
    $.ajax({ 
    type: 'POST', 
    url: '@Url.Action("getsubmenus", "Users")', // don't hard code url's 
    data: { userid: userId, menuid: mnid }, // no quotes 
    dataType: 'html', // change this 
    success: function (data) { 
     $(someElement).html(data); // modify selector to suit 
    } 
    }); 
}); 

边注:您的部分是渲染具有重复id属性控制(无效的HTML)和重复name属性没有索引,以便将无法绑定到一个模型中,当您提交表单,虽然它不清楚是什么的所有那些隐藏输入的一点是,因为没有什么可编辑的,所以你只是回发完全相同不变相同的数据(降低您的应用程序并打开自己过发帖攻击)