#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>");
}