【问题标题】:How to display a list using ViewBag如何使用 ViewBag 显示列表
【发布时间】:2012-05-18 07:22:26
【问题描述】:

您好,我需要使用 viewbag 显示数据列表。但我做不到。
请帮我..
我试过这个东西:

 ICollection<Learner> list = new HobbyHomeService().FetchLearner();
 ICollection<Person> personlist = new HobbyHomeService().FetchPerson(list);
 ViewBag.data = personlist;

和内部视图:

 <td>@ViewBag.data.First().FirstName</td>

但这不会显示值并给出错误消息“Model.Person 不包含 First() 的定义”

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 model-view-controller viewbag


    【解决方案1】:

    在您看来,您必须将其转换回原始类型。没有演员表,它只是一个对象。

    <td>@((ViewBag.data as ICollection<Person>).First().FirstName)</td>
    

    ViewBag 是 C# 4 动态类型。除非强制转换,否则从它返回的实体也是动态的。但是,像 .First() 这样的扩展方法和所有其他 Linq 方法 do not work with dynamics

    编辑 - 解决评论:

    如果要显示整个列表,就这么简单:

    <ul>
        @foreach (var person in ViewBag.data)
        {
            <li>@person.FirstName</li>
        }
    </ul>
    

    .First() 之类的扩展方法不起作用,但它会起作用。

    【讨论】:

    • 嘿,谢谢,我得到了值,但你能告诉我如何获取列表中分配的所有值吗?
    【解决方案2】:

    总而言之,它应该是这样的:

    在控制器中:

    List<Fund> fundList = db.Funds.ToList();
    ViewBag.Funds = fundList;
    

    然后在视图中:

    @foreach (var item in ViewBag.Funds)
    {
        <span> @item.FundName </span>
    }
    

    【讨论】:

    • 伟大的克里斯。我喜欢你的方法,但这不是我想要的。即便如此,还是要为你的好方法投一票。
    • 简洁明快,我喜欢这个
    【解决方案3】:

    只需将 Viewbag 数据用作 IEnumerable 列表

    @{
     var getlist= ViewBag.Listdata as IEnumerable<myproject.models.listmodel>;
    
      foreach (var item in getlist){   //using foreach
    <span>item .name</span>
    }
    
    }
    
    //---------or just write name inside the getlist
    <span>getlist[0].name</span>
    

    【讨论】:

      【解决方案4】:

      我有同样的问题,我搜索和搜索..但没有结果。
      所以我把我的大脑放在超速驾驶中。我想出了以下解决方案。 在查看页面试试这个

      在页面顶部添加此代码

       @{
            var Lst = ViewBag.data as IEnumerable<MyProject.Models.Person>;
          }
      

      要显示特定属性,请使用以下代码

      @Lst.FirstOrDefault().FirstName
      

      在你的情况下使用下面的代码。

      <td>@Lst.FirstOrDefault().FirstName </td>  
      

      希望对你有帮助……

      【讨论】:

        【解决方案5】:

        使用 as 变量将 Viewbag 数据转换为所需的视图类。

        @{
        
        IEnumerable<WebApplication1.Models.Person> personlist = ViewBag.data as
        IEnumerable<WebApplication1.Models.Person>;
        // You may need to write WebApplication.Models.Person where WebApplication.Models is
          the namespace name where the Person class is defined. It is required so that view 
          can know about the class Person. 
        }
        

        考虑写这个

        <td>
            @(personlist.FirstOrDefault().Name)
        </td>
        

        【讨论】:

          【解决方案6】:

          放一个

           List<Person>
          

          进入 ViewBag 并在 View 中将其投射回 List

          【讨论】:

          • 我没听明白。你的意思是说我应该只显示 ViewBag.data 或者你的意思是别的......??
          • 哦,这太刻薄了。从我的手机发布帖子发送得太早了,括号被剥离了。请参阅编辑以进行更正。对不起。您可能还需要在您的视图中使用 System.Linq
          【解决方案7】:

          这就是我所做的,它奏效了......

          C#

          ViewBag.DisplaylList = listData; 
          

          javascript

          var dispalyList= @Html.Raw(Json.Encode(this.ViewBag.DisplaylList));
          for(var i=0;i<dispalyList.length; i++){
          
           var row = dispalyList[i];
           ..............
           ..............
          

          }

          【讨论】:

            【解决方案8】:
                 //controller  You can use this way
            
                public ActionResult Index()
                {
                  List<Fund> fundList = db.Funds.ToList();
                 ViewBag.Funds = fundList;
                    return View();
                }
            
            
            
            
            <--View ; You can use this way html-->
            
            @foreach (var item in (List<Fund>)ViewBag.Funds)
            {
                <p>@item.firtname</p>
            }
            

            【讨论】:

              【解决方案9】:

              我有一个问题,我想使用我的 ViewBag 通过 RenderPartial 作为对象发送元素列表,为此你必须先进行转换,我必须将 ViewBag 转换为控制器和也可以查看。

              在控制器中:

              ViewBag.visitList = (List<CLIENTES_VIP_DB.VISITAS.VISITA>)                                                                 
              visitaRepo.ObtenerLista().Where(m => m.Id_Contacto == id).ToList()
              

              在视图中:

              List<CLIENTES_VIP_DB.VISITAS.VISITA> VisitaList = (List<CLIENTES_VIP_DB.VISITAS.VISITA>)ViewBag.visitList ;
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多