2017-07-25 51 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解决了问题。感谢您回复我并非常感谢。