2015-09-12 6 views
0

Я работаю над проектом MVC и имеет раскрывающийся список, чтобы заполнить название страны. Но я хочу заблокировать некоторые названия стран, чтобы они не отражались в этом раскрывающемся списке. Для заблокированных стран значение ключа должно быть указано в файле «web.config». Мне не нужен жесткий код. Мой текущий код указан ниже. Это будет немного перепутано.Чтобы заблокировать некоторые элементы в выпадающем списке Список

Шаг 1

private static void FillCombos(GuestInformationPresenter model) 
{ 
    FillCountryLists(model);   
} 

Шаг 2 // Этот код записывается в GuestInformation контроллере

/// <summary> 
/// Function to fill countries in combos. 
/// </summary> 
/// <param name="model">GuestInformationPresenter type of object</param> 
private static void FillCountryLists(GuestInformationPresenter model) 
{ 
    //I want to add some Linq code here to Block some countries. 
    model.FillCountryLists(ReservationService.RetrieveCountries()); 
} 

Шаг 3 // Этот код записывается в GuestInformation Presenter

public void FillCountryLists(Dictionary<string, string> countryList) 
{ 
    this.CountryList = countryList; 
}  

Шаг 4 // Функция для извлечения коллекции стран. /// /// коллекция стран public static KeyValuePair [] RetrieveCountries() { return LookupManager.RetrieveCountries(); }

public static Dictionary<string, string> RetrieveCountries() 
{ 
    KeyValuePair<string, string>[] countries = 
     CruiseLookup.RetrieveCountries(); 
    return countries.ToDictionary<KeyValuePair<string, string>, string, string>(pair => pair.Key, pair => pair.Value); 
} 

Шаг 5 // Этот код записывается в LookManager.cs

public static KeyValuePair<string, string>[] RetrieveCountries() 
{ 
    var countries = from LookupData.CountryRow countryRow in LookupManagerCache.Retrieve().CountryRows 
    orderby countryRow.Name 
    select new KeyValuePair<string, string>(
     DataField.RetrieveValue(() => countryRow.Code), 
     DataField.RetrieveValue(() => countryRow.Name)); 

    return countries.ToArray(); 
} 

Метод, который делает return countries.ToArray(); (Шаг 5) является общим для получения списка стран, но когда я хочу этот список bind UserInformation Controller, тогда я хочу заблокировать эти страны.

В настоящее время с шага 4 я получаю пару ключевых цен из разных стран. Например, если страна является Guiena то ключ-значение пары с шага 4 будет значение ключ = «Gu» = «GUIENA»

После этого на шаге 3, я использую этот код, чтобы удалить страны Guiena '

public void FillCountryLists(Dictionary<string, string> countryList) 
{ 
    countryList.remove(key="GU"); 
    countryList.remove(key="XYZ"); // Here XYZ is key of any other country 
    this.CountryList = countryList; 
} 

Но я хочу добавить LINQ или другой код на шаге 2 (на уровне контроллера), чтобы удалить страны.

Главное, что я хочу, это то, что для заблокированных стран значение ключа должно быть указано в файле «web.config». Можете ли вы помочь мне исправить это?

+0

в чем проблема? вы не можете удалить их на шаге 2? –

+0

вы можете добавить их в web.config и прочитать в контроллере –

+0

@EhsanSajjad это невозможно с помощью некоторых Linq. Главное, что я хочу, это то, что для заблокированных стран значение ключа должно быть указано в файле «web.config». Я новичок в MVC, можете ли вы добавить некоторую помощь по коду? Заранее спасибо. – Web34

ответ

1

Вы можете использовать Содержит как это:

var excludeKeys = new string[] { "GU", "XYZ" }; 
var countries = from .... 
       where !excludeKeys.Contains(your key field) 
       orderby .... 
       select ....; 

Поэтому, чтобы ваши коды, вам нужно передать excludeKeys вашему методу RetrieveCounties и использовать их в запросе.

Шаг 2

private static void FillCountryLists(GuestInformationPresenter model) 
{ 
    var excludeKeys = new string[] { "GU", "XYZ" }; 
    model.FillCountryLists(ReservationService.RetrieveCountries(excludeKeys)); 
} 

Шаг 5

public static KeyValuePair<string, string>[] RetrieveCountries(List<string> excludeKeys) 
{ 
    var countries = from .... 
        where !excludeKeys.Contains(your key field) 
        orderby .... 
        select ....; 
    return .... 
} 

Этого достаточно, чтобы добавить пустой список RetrieveCountries метод не фильтровать страны.

Как упоминалось в комментариях и в ответе Эхсана Саджада, вы можете сохранить эти значения в виде разделенной запятой строки в сети.config или файл settings.setting, затем извлеките его, разделите, поместите в список и затем перейдите к вашему методу.

+0

Насколько я понимаю, вы просите добавить свой код на шаге 5. Но я не хочу исключать страны на этом уровне. Я хочу исключить страны на уровне контроллера Каким будет код, который мы должны добавить в файл «web.config»? – Web34

+0

Уважаемый, могу я знать, что вы подразумеваете под «своим ключевым полем»? Я не могу это получить. – Web34

+0

Благодарим за помощь. Я добавлю ключевые значения в виде строки, разделенной запятой, в web.config, как предложено Эхсаном Саджадом. Но как я могу получить их для вашего кода. Можете ли вы добавить код шаг за шагом для меня, так как я более свежлив в мире MVC, поэтому ожидаю помощи в деталях. – Web34

0

В вашем web.config добавить в список заблокированных стран, или если у вас нет этого раздела добавьте его в разделе конфигурации:

<configuration> 
    <appSettings> 
    <add key="BlockedCountries" value="GU,XYZ"/> 
    </appSettings> 
</configuration> 

, а затем в контроллере:

using System.Web.Configuration; 
.............. 
.............. 




var blockedCountries = WebConfigurationManager.AppSettings["BlockedCountries"].Split(',',StringSplitOptions.RemoveEmptyEntries); 

var result = model.countries.Where(x=> !blockedCountries.Contains(x.Key)).ToArray(); 
+0

@ Ehsan.I извиняюсь, если я задаю глупые вещи. Одно сомнение: если я использую ваше решение, то есть ли необходимость добавить код что предложил Реза Агайи и что такое «результат var» в контроллере? – Web34

+0

Вы также можете использовать этот код, я просто показал вам, как вы можете фильтровать записи на основе значения из web.config @ web34 –

+0

, но нет возможности добавить var result = model.countries.Where (x =>! blockedCountries.Contains (x.Key)) ToArray(). в контроллере. Он не работает, не могли бы вы перепроверить его. – Web34

Смежные вопросы