Как найти значение элемента списка переменных ViewBag в C# - PullRequest
0 голосов
/ 14 января 2020

У меня есть случай, когда я загружаю комбинированный список на основе окна просмотра, где он заполняется списком выбора

Таким образом, список выбора заполняется этим кодом

private SelectList GetBranches(int? selected = null)
{
    IPracticeRepository rep = db.GetPracticeRepository();

    var curPracticeId = GetUser()?.PracticeId ?? 0;
    var branches = rep.GetById(curPracticeId).Branches;
    var selectList = new List<SelectListItem>();
    if (selected == null) selectList.Add(new SelectListItem() { Selected = true, Text = "", Value = "" });
    foreach (var item in branches)
    {
        if (item.CanCollectReceipts)
            selectList.Add(new SelectListItem() { Value = item.Id.ToString(), Text = item.Name, Selected = selected == item.Id });
    }
    if (selectList.Count == 0) selectList.Add(new SelectListItem() { Selected = true, Text = "", Value = "" });

    return new SelectList(selectList, "Value", "Text");
}
...

ViewBag.Branches = GetBranches(invoice.Visit.Branch.Id)

I тогда хочу установить переменную, которая будет скрывать или показывать поле со списком, основываясь на том, является ли первое значение "" установленным, когда счетчик равен 0.

if (ViewBag.Branches == "")
{
    setSite = false;
}
else
{
    setSite = true;
}
ViewBag.Setsite = setSite;

Так что, очевидно, приведенный выше код не работает, но я я пытаюсь выяснить, как мне найти значение этого первого значения в окне просмотра, чтобы я мог установить свою переменную.

1 Ответ

1 голос
/ 14 января 2020
if (((SelectList)ViewBag.Branches).First().Value == "")

Хотя, если вы все еще на стороне контроллера, то, вероятно, чище до

var the_list = GetBranches(invoice.Visit.Branch.Id); // Guarantees at least 1 element in the list

ViewBag.Branches = the_list;
if (the_list.First().Value == "")
{
  ...
}

Хотя, тем не менее, если вы все еще на стороне контроллера, вы, вероятно, не хотите в первую очередь сохраните setSite в сумке, учитывая, что она строго связана с содержимым списка. Поэтому вам, вероятно, следует переместить эту часть в представление:

@{
    bool setSite = (((SelectList)ViewBag.Branches).First().Value != "";
}

// using setSite in the markup
...