将所有 ViewBag 放入 Array List 并设置为 Null

Getting all ViewBag into Array List and Set to Null

我正在尝试构建这个简单的 Foreach 循环:

public void SetCurrent(ControllerBase controllerBase)
{
    System.Web.Mvc.IValueProvider iv = null;
    ControllerBase[] ctrlbase = { ViewBag.samplea, ViewBag.sampleb};

    foreach (var ct in ctrlbase)
    {
        ct.ValueProvider = iv;
    }

    controllerBase.Equals("current");
}

但是当我尝试 运行 代码时 returns 这部分我出错了 ct.ValueProvider = iv;:

Object reference not set to an instance of an object.

这是我测试函数的方式:

SetCurrent(ViewBag.samplea);

我想要做的是设置所有 ViewBag to Empty Stringnull 并将参数值设置为 current,它看起来像 controllerBase="current"

是否可以使用这个简单的功能?

非常感谢任何好主意。

这是我制定的临时解决方案:

public void SetCurrent(String Controlbase)
        {
            SetAllViewBagToNull();
            switch (Controlbase)
            {
                case "samplea":
                    {
                        ViewBag.samplea= "current";
                        break;
                    }
                case "sampleb":
                    {
                        ViewBag.sampleb= "current";
                        break;
                    }
            }


        }
        public void SetAllViewBagToNull()
        { 
            ViewBag.samplea= "";
            ViewBag.sampleb= "";
        }

当然是 working 因为我们观察到这是一个 manual 编码。

1) 如果要清除ViewBag,我们可以调用

ViewData.Clear();

ViewBag 只是 ViewData 周围的 wrapper

2) 如果您想删除特定项目,您始终可以手动执行:

ViewBag.sampleb = null;

更新:

3) 如果您在 Controlbase 参数中获取 key 值,您可以这样做:

public void SetCurrent(String Controlbase)
{
    SetAllViewBagToNull();
    ViewData[Controlbase] = "current";
}