我得到了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
您是否正在採取正確的操作方法? ajax調用說:LoadFiltersX,但你已經粘貼了「LoadFiltersX」作爲http post操作方法。 – Chethan