我得到了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