如何在 C# 中查找 ViewBag 变量列表项的值

How do I find the value of a ViewBag variable list item in C#

我有一个案例,我正在加载一个基于 viewbag 的组合框,其中由 select 列表

填充

因此 select 列表是通过此代码填充的

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)

然后我想设置一个变量,该变量将根据计数为 0 时设置的第一个值是否为 "" 来隐藏或显示组合框。

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

显然上面的代码不起作用,但我想弄清楚如何在 viewbag 中找到第一个值的值,以便我可以设置我的变量。

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