2015-10-29 131 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屬性沒有索引,以便將無法綁定到一個模型中,當您提交表單,雖然它不清楚是什麼的所有那些隱藏輸入的一點是,因爲沒有什麼可編輯的,所以你只是回發完全相同不變相同的數據(降低您的應用程序並打開自己過發帖攻擊)