【问题标题】:ViewBag on ListBox gets empty dataListBox 上的 ViewBag 获取空数据
【发布时间】:2016-04-27 16:16:04
【问题描述】:

我创建了一个 LINQ 语句来填充 ViewBag 并将其显示在我的视图上,但是由于某种原因我的 ListBox 显示为空,所以我将 LINQ 语句保存在一个 txt 文件中以查看它是否为空,但它具有正确的数据,所以我的问题是:

为什么我的 ViewBag 没有显示在我的 View 中的 ListBox 上?

这是我的 Linq 正在填充 ViewBag:

foreach (var item in db.VENTA_PLATILLOS
                       .Select(v => new { Turno = v.Nombre_Turno, Total = v.Total })
                       .GroupBy(l => l.Turno)
                       .AsEnumerable()
                       .Select(z => new { Turno = z.Key, Total = String.Format("{0:$#,##0.00;($#,##0.00);Zero}", Decimal.Round(z.Sum(l => l.Total), 0)) })
                       .OrderByDescending(a => a.Turno))

{
    listadesumas.Add(string.Format("{{{0}, Total = {1}}}", item.Turno, item.Total));
}

//txt file to see if Linq Statemnt is filled correctly and it is
var json5 = JsonConvert.SerializeObject(listadesumas);
System.IO.File.WriteAllText(@"C:\inetpub\wwwroot\SumasTurno.txt", json5);

//Filling my Viewbag with my LinQ Group By Result
var grupos = new SelectList(listadesumas.ToList());
ViewBag.Group = grupos;

这是我的视图列表框:

@{
    var group = (SelectList)ViewBag.Group;
 }

@Html.ListBox("Group", (IEnumerable<SelectListItem>)ViewBag.Group, new { style = "width: 300px;" })

【问题讨论】:

    标签: c# asp.net-mvc linq listbox viewbag


    【解决方案1】:

    请在您的控制器中尝试以下操作...

    ViewBag["Group"] = grupos;
    

    ...视图中的这个...

    @Html.ListBox("Group", (IEnumerable<SelectListItem>)ViewBag["Group"], new { style = "width: 300px;" })
    

    【讨论】:

    • 感谢@Avroh 的帮助,但是我在运行它时遇到了这个异常“No se puede aplicar la indización con [] a una expresión del tipo 'System.Dynamic.DynamicObject'”
    • @ArturoMartinez 这很奇怪,我总是这样做,而且从未见过这样的例外。您能否提供更多设置的详细信息,例如 VS 版本、MVC 版本等。任何可能相关的内容。另外,如果您启动一个新的 ASP.NET MVC 网站,并将这样的代码行添加到默认控制器,您会得到相同的异常吗?
    • @ArturoMartinez 刚刚尝试了一个新项目,使用了与您类似的代码,并且运行良好,因此您的项目似乎存在问题。尝试创建一个新项目并将相关位复制过来,看看您是否可以在新项目中重现问题,或者让它正常工作。无论哪种方式,它都应该给你一些洞察力。看起来你的代码很好。
    【解决方案2】:

    在不知道底层数据库表的情况下,我已尽我所能尝试了您的示例。我没有发现问题,并发现它确实通过包含选择列表的 viewbag 属性正确呈现了选项列表。所以在这个例子中,我为底层数据库表存根了一个字符串列表。在此示例中,我能够通过包含结果列表的 viewbag 属性填充选项列表。我想知道您认为它没有显示的结论是否与 viewbag 属性“Group”的内容有关

    我的示例代码:

    public ActionResult Index()
    {
    
        List<string> listadesumas = new List<string>();
        var FakeDbTable = new List<string>() { "a.bc", "a.cde", "b.xyz" };
    
        foreach (var item in FakeDbTable.Select(v=> new { itemname = v })
                .GroupBy(l => l.itemname.Substring(0, 1)).AsEnumerable().Select(z =>new { GroupingValue= z.Key, Total=string.Format("count {0}",z.Count())}).OrderByDescending(a=>a.GroupingValue))
                 {
            listadesumas.Add(string.Format(" result item {0}",item));
                 }
    
        var grupos = new SelectList(listadesumas.ToList());
    
        ViewBag.Group = grupos;
    
        return View();
    }
    

    查看代码

        @{
        ViewBag.Title = "Home Page";
        var group = (SelectList)ViewBag.Group;
    }
    <div class="row">
        <div class="col-md-12">
            @Html.ListBox("Group", (IEnumerable<SelectListItem>)ViewBag.Group, new { style = "max-width: 500px;" })
        </div>
    </div>
    

    结果显示如下:

    【讨论】:

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