将所有ViewBag放入数组列表并设置为空

时间:2017-09-21 06:11:36

标签: .net asp.net-mvc asp.net-mvc-4

我试图构建这个简单的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");
}

但是当我尝试运行代码时,它会向我返回错误ct.ValueProvider = iv;

  

对象引用未设置为对象的实例。

这就是我测试函数的方法:

SetCurrent(ViewBag.samplea);

我要做的是设置所有ViewBag to Empty Stringnull并将参数设置为值current,它看起来像{{1} }}

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

任何明智的想法都受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

1)如果您要清除ViewBag,我们可以致电

ViewData.Clear();

ViewBag只是ViewData附近的wrapper

2)如果要删除特定项目,可以随时手动执行:

ViewBag.sampleb = null;

更新

3)如果您在key参数中获得Controlbase值,则可以执行以下操作:

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

答案 1 :(得分:0)

这是iv的一个临时解决方案:

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编码。