2017-07-25 66 views
0

我得到了2下拉列表框和我加載值到第一個下拉列表,並根據其選擇我通過AJAX加載值通過同樣的操作方法:第二個

下面

是我的腳本

$(document).ready(function() {  
    $("#ddlOrgs").change(function() { 
    var listSite = $("#_site"); 
    var SelctedOrgCode = $("#ddlOrgs").val(); 
    alert(SelctedOrgCode); 
    if (SelctedOrgCode != 0) {    

     var url = '@Url.Action("GetSites","FilterMenu")';    
     $.ajax({    
      url : url, 
      type: 'POST', 
      tempdata:{}, 
      data: JSON.stringify(tempdata),      
      dataType: 'json', 
      contentType: "application/json; charset=utf-8", 
     }) 
     .done(function (data) { 
     var sitesDropdown = $("#ddlSites");          
     var list = data; 
     $.each(list, function (index, item) { 
       sitesDropdown.append('<option value?+item.SiteCode+?="">' + item.SiteName + '</option>'); 
       alert(item); 
     }); 

     }) 
     .fail(function(xhr){ 
      alert('failed'); 
      alert(xhr.responseText); 
    }); 
      }    
     }); 
    }); 

我的控制器操作方法

[HttpPost] 
public IEnumerable<Client> LoadFiltersX(constants.ClientType clientType) 
{ 
     List<Client> Clients = new List<Client>(); 
     Client thisClient = new Client(); 

     _client.UserName = this.UserName; 

     ClientRepository ClientRepo = new ClientRepository(_client); 

     switch (clientType) 
     { 
      case constants.ClientType.ORG: 
       Clients = ClientRepo.GetClientInformation(constants.ClientType.ORG); 
       //HttpContext.Current.Session.Add(constants.SESSION_CLIENT,thisClient); 
       System.Web.HttpContext.Current.Session.Add(constants.SESSION_CLIENT, _client); 
       break; 
      case constants.ClientType.CLIENT: 
       Clients = ClientRepo.GetClientInformation(constants.ClientType.CLIENT); 
       System.Web.HttpContext.Current.Session.Add(constants.SESSION_CLIENT, thisClient); 
       System.Web.HttpContext.Current.Session.Add(constants.SESSION_CLIENT, _client); 
       break; 
      case constants.ClientType.SITE: 
       Clients = ClientRepo.GetClientInformation(constants.ClientType.SITE); 
       System.Web.HttpContext.Current.Session.Add(constants.SESSION_CLIENT, thisClient); 
       System.Web.HttpContext.Current.Session.Add(constants.SESSION_CLIENT, _client); 
       break; 
      case constants.ClientType.SYSTEM: 
       Clients = ClientRepo.GetClientInformation(constants.ClientType.SYSTEM); 
       System.Web.HttpContext.Current.Session.Add(constants.SESSION_CLIENT, thisClient); 
       System.Web.HttpContext.Current.Session.Add(constants.SESSION_CLIENT, _client); 
       break; 
     } 
     System.Web.HttpContext.Current.Session.Add(constants.SESSION_CLIENT, _client); 

     return Clients; 
    } 








     [HttpPost]    
     public JsonResult GetSites() 
     {    
       return Json(LoadFiltersX(constants.ClientType.SITE), JsonRequestBehavior.AllowGet); 

      } 

在我的倉庫,我回到列表集合如下

public List<Client> GetClientInformation(constants.ClientType clientType) 
     { 
      List<Client> Clients = new List<Client>(); 
      Repository Repo = new Repository(); 

      Paralist.Clear(); 
      SqlParameter p = new SqlParameter("OrgCode", _client.OrgCode); 

      Paralist.Add(p); 
      p = new SqlParameter("SiteCode", _client.SiteCode); 
      Paralist.Add(p); 

      p = new SqlParameter("ClientCode", _client.ClientCode); 
      Paralist.Add(p); 

      p = new SqlParameter("UserName", _client.UserName); 
      Paralist.Add(p); 

      try 
      { 
       SqlCommand com = Repo.GetCommand("uspStructureBuilderFilterGET", Paralist); 
       Client AddingClient = null; 
       using (IDataReader ClientReader = com.ExecuteReader()) 
       { 
        while (ClientReader.Read()) 
        {       
         switch(clientType) 
         { 
          case constants.ClientType.ORG:        
           AddingClient = new Client(){ OrgCode=ClientReader["OrgID"].ToString(), OrgName = ClientReader["Description"].ToString() }; 
           break;       

          case constants.ClientType.SITE: 

           AddingClient = new Client(){ OrgCode = _client.OrgCode, OrgName = _client.ClientName, SiteCode=ClientReader["SiteID"].ToString(), SiteName = ClientReader["Description"].ToString() }; 
           break; 

          case constants.ClientType.CLIENT: 
           AddingClient = new Client(){ OrgCode = _client.OrgCode, OrgName = _client.ClientName, SiteCode= _client.SiteCode, SiteName = _client.SiteName, ClientCode=ClientReader["ClientID"].ToString(), ClientName = ClientReader["Description"].ToString() }; 
           break; 

          case constants.ClientType.SYSTEM: 
           AddingClient = new Client(){OrgCode = _client.OrgCode, OrgName = _client.ClientName, SiteCode= _client.SiteCode, SiteName = _client.SiteName, ClientCode = _client.ClientCode, ClientName = _client.ClientName, SystemId=ClientReader["SystemID"].ToString(), SystemName = ClientReader["System"].ToString() }; 
           break; 
         } 
         AddingClient.UserName = _client.UserName;       
         Clients.Add(AddingClient); 
        } 
       }     
      } 
      catch(Exception e) 
      { 
       ErrorLogger el = new ErrorLogger(); 
       el.AddErrorToLogger("ClientRepository", "GetClientInformation", e.Message, HttpContext.Current.User.Identity.Name); 
       throw e; 
      } 

      return Clients; 
     } 

視圖部分(位於版式文件)

@if (Session.Count > 0 && Session["UserName"].ToString().Length > 0) 
{ 
    Client Client = new StB.Models.Client(); 
    ClientRepository cr = new ClientRepository(Client); 
    //FilterMenu fm = new FilterMenu(Client); 
    FilterMenuController fmc = new FilterMenuController(Client); 

    <div class="DrawEmptyRow"></div> 


    <div class="navbar"> 
     @*<div class="navbar-collapse collapse">*@ 
     <ul class="nav navbar-nav list-inline ListItemHeight"> 
      <li>Org: @Html.DropDownList("ddlOrgs", new SelectList(fmc.GetAllOrganizations.ToList(), "OrgCode", "OrgName", String.Empty), "-- Select Organisation --")</li>   
      <li id="_site">Site: <select id="ddlSites" name="ddlSites"> 
    <option value="">Select Site </option> 
</select></li> 

      <li>Exclude Decom: @Html.CheckBox("exDcom")</li> 
      <li>Exclude No Equip: @Html.CheckBox("ExNoEQuip")</li> 
     </ul>   
    </div>   
} 

當我打電話沒有返回結果和控制檯顯示錯誤 「TempData的undefned」。此方法不會傳遞任何參數。每個下拉列表都有相同的客戶端列表,但首先接受'ORG'枚舉,第二個接受'SITE'枚舉。所以我通過了每種方法。我想讓List填充下拉列表。我通過Controller中的正常Action方法成功加載第一個dropdwon列表。但在Ajax方法中發生問題。請幫助我,因爲我陷入了錯誤的地步。我應該改變它'GET'?那麼ajax方法失敗並顯示帶有css值的html頁面。任何人都請幫助我,因爲我正在努力爭取這一點。感謝您提前幫助。

感謝 TPK

+0

您是否正在採取正確的操作方法? ajax調用說:LoadFiltersX,但你已經粘貼了「LoadFiltersX」作爲http post操作方法。 – Chethan

回答

0

在你的Ajax調用刪除「TempData的」如果你沒有爲它的任何值的變量。

 $.ajax({    
      url : url, 
      type: 'POST',     
      data: {}, // Pass the paramaters for MVC action method here...      
      dataType: 'json', 
      contentType: "application/json; charset=utf-8", 
     }) 

url ='@ Url.Action(「GetSites」,「FilterMenu」)'; :注意:如果您將您的JavaScript移動到單獨的JavaScript文件,這將不起作用。使用相對URL「/ Controller/ActionMethod」。

0

我發現使用JsonResult迴歸法$ .getJSON解決

var url = "/FilterMenu/GetAllSites" 
    $.getJSON(url, function (response) {   
      sites.empty(); // remove any existing options 
      $.each(response, function (index, item) {   
       sites.append('<option value='+item.SiteCode +'>' + item.SiteName + '</option>') 
      }); 

是的,你是我用@ Url.Action方法,但返回錯誤說「找不到位置404錯誤」當我打的正確在瀏覽器鏈接URL負載如下 (這是另外一個問題,我得到) http://localhost:10345/首頁/FilterMenu/GetAllSites(注意:新新鏈接添加到主控制器部分)

當我充分URL(這樣的「 http://localhost:10345/FilterMenu/GetAllSites並點擊輸入它將跳轉到正確的操作方法並返回結果。

我意識到附加/ Home部分會產生錯誤。現在我改變成了像你說的那樣工作的相對URL。事實上,我曾經給過一樣,但沒有任何作品。但現在$ getJSON解決了問題。感謝您回覆我並非常感謝。