Отображение количества элементов списка Viewbag

#c# #asp.net-mvc #razor

#c# #asp.net-mvc #razor

Вопрос:

Привет, есть ли способ отобразить список viewbag и показать количество

Нравится:

Объединенные Арабские Эмираты (8)
Ангола (4)
Аргентина (7)
Австрия (0)
Бельгия (11)

В настоящее время у меня есть список флажков (помощник по костюмам)

 @Html.CheckBoxList("checkedLocation", (ViewBag.country_list as MultiSelectList))
  

Отображаются только страны. Было бы здорово, если бы в одном и том же списке было количество
В принципе, у меня есть таблица компаний с полями страны. Просто хочу показать, что в Бразилии доступно десять компаний, таких как Бразилия (10)

Так viwbag заполняется

 List<country> listInfo2 = db.countries.Where(row => row.covered == 1).ToList();
List<string> checkedValues = new List<string>();
MultiSelectList checkedValuesList = new MultiSelectList(listInfo2, "country_name", "country_name", checkedValues);
ViewBag.country_list = checkedValuesList
  

Комментарии:

1. можете ли вы показать, как вы заполняете этот Viewbag?

2. Только что отредактировал код контроллера в

3. Быстрый вопрос, какой смысл checkedValues , если это просто пустой список строк? У него их нет selected values ?

Ответ №1:

Вы можете вернуть новый динамический список объектов. Вот пример:

 public class country
{
    public string Name { get; set; }
    public string Covered { get; set; }
}
List<country> contries = new List<country>() { 
    new country(){ Name = "Siraj", Covered = "1"},
    new country(){ Name = "Kumail", Covered = "1"},
    new country(){ Name = "Ali", Covered = "1"},
    new country(){ Name = "Haider", Covered = "1"}
};
 var query = (from x in contries
              group x.Id by x.Name into g
              select new { CustomName = string.Format("{0} ({1})", g.Key, g.Count()) }).ToList();
  

Комментарии:

1. Спасибо Siraj за ввод ur. Вышеуказанные подсчеты рассматриваются правильно? Ищу что-то, что запрашивает таблицу company. т.е. Запрашивает, сколько раз Бразилия появляется в поле com_country во всех строках.

2. Тогда вам нужно предложение group by. Я соответствующим образом обновил код.

3. я не могу получить этот «var query» в List<> . Идея состоит в том, чтобы запросить таблицу Company и подсчитать количество стран..

Ответ №2:

Наконец-то получил правильный контроллер:

 //COUNTRIES TO CHECKBOX LIST
        List<DeviceGroupViewModel> listInfo2 = db.companies.GroupBy(fu => fu.COM_COUNTRY).Select(g => new DeviceGroupViewModel { Type = g.Key, Count = g.Count() }).ToList();
        MultiSelectList checkedValuesList = new MultiSelectList(listInfo2, "Type", "Count");
        ViewBag.country_list = checkedValuesList;
  

Вид:

  @Html.CheckBoxList2("checkedLocation", (ViewBag.country_list as MultiSelectList))
  

Помощник Checkboxlist:

  public static MvcHtmlString CheckBoxList2(this HtmlHelper htmlHelper, string name, MultiSelectList listInfos)
    {
        if (string.IsNullOrEmpty(name))
        {
            throw new ArgumentException("This parameter cannot be null or empty!", "name");

        }
        if (listInfos == null)
        {
            throw new ArgumentException("This parameter cannot be null!", "listInfos");
        }


        //if (listInfos.Count<SelectListItem>() < 1)
        //{
        //    throw new ArgumentException("The count must be greater than 0!", "listInfos");
        //}

        List<string> selectedValues = (List<string>)listInfos.SelectedValues;
        StringBuilder sb = new StringBuilder();



        foreach (SelectListItem info in listInfos)
        {

            sb.Append("<li class='Navlist'>");
            TagBuilder builder = new TagBuilder("input");

            if (info.Selected) builder.MergeAttribute("checked", "checked");

           //builder.MergeAttributes<string, object>(htmlAttributes);

            builder.MergeAttribute("type", "checkbox");

            builder.MergeAttribute("value", info.Value);

            builder.MergeAttribute("name", name);

            builder.MergeAttribute("id", info.Value);

            builder.MergeAttribute("class", "filter-classif");



            builder.InnerHtml = "<label>"   info.Value   "("   info.Text   ")</label>";



            sb.Append(builder.ToString(TagRenderMode.Normal));
            sb.Append("</li>");



        }