2015-06-17 136 views
-1

我有下拉列表,我需要排序。我嘗試過,但我對此抱有懷疑。排序下拉列表

我的代碼看起來像,

public ActionResult GetAgencyState(string statecode) 
    { 
     _logger.Info("GetAgencyState: " + statecode); 
     AuthUserProfile profile = _sessionHelper.Get<AuthUserProfile>(SessionConstant.LightAUP); 
     List<Light_AgenciesState> getAgenciesState = _mcpServiceHelper.GetAgenciesState(
      profile.au_key.ToString(), profile.officernode.ToString(), profile.role, statecode); 
     Dictionary<string, string> agenciesState = new Dictionary<string, string>(); 
     agenciesState = getAgenciesState.ToDictionary(x => x.AgencyKey.ToString(), x => x.AgencyName); 
     agenciesState = agenciesState.Count() == 0 ? null : agenciesState; 
     agenciesState.OrderBy(agenciesState => agenciesState.Value); 
     return Json(agenciesState, JsonRequestBehavior.AllowGet); 
    } 

我得到一個錯誤,在這條線:

 agenciesState.OrderBy(agenciesState => agenciesState.Value); 

我的JavaScript代碼調用該方法:

var GetAgencyStateUrl = "/Import/GetAgencyState"; 
function OwnerStateFunction() { 
var selectedVal = $("option:selected", $("#Ownerstate")).attr("Value"); 
if (selectedVal != "- select -" && selectedVal != "") { 
    $.get(GetAgencyStateUrl, { 'statecode': selectedVal }, function (data) { 
    $('#AgentPhone').val(""); 
     $.map(data, function (value, key) { 
      var opt = "<option value=\"" + key + "\">" + value + "</option>"; 
      $("#OwnerAgency").append(opt); 
     }); 
    } 

如何實現分類?

+2

究竟是什麼錯誤? –

+0

我假設你的意思是'agenciesState = agenciesState.OrderBy(..)'?但如果這是爲了填充下拉菜單,爲什麼你要返回一本字典? –

+0

你的意思是值是選項顯示文本,關鍵是選項值?在前面的行中,您可能會將'agenciesState'設置爲null - 您可以在'null'上調用'OrderBy()'的方式 - 它只會引發異常。 –

回答

0

與這一個

agenciesState.OrderBy(a => a.Value); 
+0

顯示我爲下拉式書寫的剃鬚刀代碼 – Imad

+0

附加它有問題,使它看起來可讀 – Imad

+0

爲什麼你使用javascript?'@ Html.DropDownList(「ddlName」,新的SelectList(YourList,「DataValue」,「DataKey」);'語法足夠滿足您的要求。 – Imad

0

首先,你不能返回一個有序集合替換你的錯誤行。您使用agenciesState.OrderBy(agenciesState => agenciesState.Value);不會將已排序的集合分配給變量。這將需要

var sorted = agenciesState.OrderBy(agenciesState => agenciesState.Value); 
return Json(sorted, JsonRequestBehavior.AllowGet); 

但是還有其他一些問題與您的代碼,其中包括前行

agenciesState = agenciesState.Count() == 0 ? null : agenciesState; 

這意味着agenciesState可能是null在這種情況下,下面一行會拋出異常。

在任何情況下,您都不應該返回字典。控制器代碼可以只是

public ActionResult GetAgencyState(string statecode) 
{ 
    .... 
    List<Light_AgenciesState> getAgenciesState = _mcpServiceHelper.GetAgenciesState(....); 
    var agenciesState = getAgenciesState.Select(a => new { Value = a.AgencyKey, Name = a.AgencyName }); 
} 

然後在AJAX功能

var url = '@Url.Action("GetAgencyState", "Import")'; // dont hardcode! 
var ownerAgency = $("#OwnerAgency"); // cache it 

$("#Ownerstate").change(function() { 
    var statecode = $(this).val(); 
    if (!statecode) { 
    return; 
    } 
    $.get(url, { statecode: statecode }, function (data) { 
    ownerAgency.empty(); // remove existing options 
    $.each(data, function(index, item) { 
     ownerAgency.append($('</option>').val(item.Value).text(item.Name)); 
    }); 
    }); 
}); 

,並從你的HTML標記刪除onchange="OwnerStateFunction()"