【问题标题】:Access a Viewbag like an Array?像数组一样访问 Viewbag?
【发布时间】:2014-09-24 13:37:51
【问题描述】:

想象一个叫做

的视图包
 ViewBag.Modes

这包含以下内容:

Simple
Advanced
Manual
Complete

如何像在数组中一样通过索引访问 viewbag?

例如,Simple 在索引 0 处,那么它看起来像这样

ViewBag.Modes[0]

我尝试了上述方法,但它不起作用......我如何使用 viewbag 复制它或者我可以使用什么解决方法?

【问题讨论】:

    标签: html asp.net-mvc razor viewbag


    【解决方案1】:

    这对我有用:

    控制器:

    public ActionResult Index()
    {
        var stringArray = new string[3] { "Manual", "Semi", "Auto"};
        ViewBag.Collection = stringArray;
        return View();
    }
    

    查看:

        @foreach(var str in ViewBag.Collection)
        {
            @Html.Raw(str); <br/>
        }
    
        @for (int i = 0; i <= 2; i++ )
        {
            @Html.Raw(ViewBag.Collection[i]) <br/>
        }
    

    输出:

    很抱歉没有使用您的条款。我是从头顶上抓起这个的。

    【讨论】:

      【解决方案2】:

      ViewBag 是一个动态属性,它使事情变得有点复杂。

      对于您正在寻找的行为,您可能希望改用 ViewData。 ViewData 是一个字典,这意味着您可以使用 Linq 访问每个索引的值:

      this.ViewData.Keys.ElementAt(0);
      

      【讨论】:

        【解决方案3】:

        在您的控制器中:

        string[] Modes = {"Simple", "Advanced", "Manual", "Complete" };
        ViewData["Modes"] = Modes;
        

        在你看来:

        <div>
            @(((string[])ViewData["Modes"])[0]) 
        </div>
        <div>
            @(((string[])ViewData["Modes"])[1]) 
        </div>
        <div>
            @(((string[])ViewData["Modes"])[2]) 
        </div>
        

        【讨论】:

          【解决方案4】:

          使用 ViewBag:

          控制器

          public ActionResult Index()
          {
          List<string> modes = new List<string>();
          modes.Add("Simple");
          modes.Add("Advanced");
          modes.Add("Manual");
          modes.Add("Complete");
          ViewBag["Modes"] = modes;
          return View();
          }
          

          查看

          <h1>List of Modes</h1>
          @{foreach (var mode in ViewBag.Modes) {
              <li>
                  @hobby
              </li>
          } }
          

          ----------------------------------------------- -----------------

          使用 ViewData:

          控制器

          public ActionResult Index()
          {
              string[] Modes = {"Simple", "Advanced", "Manual", "Complete" };
              ViewData["Modes"] = Modes;
              return View();
          }
          

          **查看

          <h1>List of Modes</h1>
          @foreach (string mode in ViewData["Modes"] as string[]) {
              <li>
                  @mode
              </li>
          }
          

          【讨论】:

            【解决方案5】:

            感谢您的帖子,但在写完这篇文章后不久,我想出了这个使用模型和列表的解决方案,如下所示,这也可以使用 viewbag 而不是模型来完成。

            List<string> list = new List<string>();
                        foreach (Models.AppModeInfo blah in Model.theAppModes)
                        {
                            list.Add(blah.Name);
                        }
            
                        var AppModeText = "";
                        switch (item.AppModeId)
                        {
                            case 1:
                                AppModeText = list[0];
                                break;
                            case 2:
                                AppModeText = list[1];
                                break;
                            case 3:
                                AppModeText = list[2];
                                break;
                            case 4:
                                AppModeText = list[3];
                                break;
                            case 5:
                                AppModeText = list[4];
                                break;
                        }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-10-30
              • 1970-01-01
              • 2013-12-30
              • 2012-06-01
              • 2011-08-18
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多