如何在ASP.NET MVC视图中循环遍历ViewBag.A至ViewBag.Z?
ASP.NET MVC视图中动态访问ViewBag属性的问题
你想在ASP.NET MVC视图中循环遍历ViewBag.A到ViewBag.Z,但当前代码里用@letter作为ViewBag属性名的写法行不通,以下是具体说明和修正方案:
原问题代码
@{ for (char letter = 'A'; letter <= 'Z'; letter++) { <h1 id=@letter>@letter</h1> if (ViewBag.@letter != null) { foreach (var item in ViewBag.@letter)) { // do something here } } } }
问题说明
直接使用ViewBag.@letter无法实现预期效果,因为Razor会将@letter解析为名为"letter"的ViewBag属性,而不是把变量letter的字符值(比如'A'、'B')作为属性名去查找。
修正方案
ViewBag本质是DynamicViewDataDictionary,支持通过索引器以字符串键的形式访问属性。你只需要把字符变量转成字符串,作为索引键传入即可:
@{ for (char letter = 'A'; letter <= 'Z'; letter++) { <h1 id="@letter">@letter</h1> // 将字符转为字符串,通过索引器获取对应ViewBag属性 var sectionItems = ViewBag[letter.ToString()]; if (sectionItems != null) { foreach (var item in sectionItems) { // 这里编写你的业务逻辑,比如输出项内容 <div>@item.Name</div> } } } }
这样就能正确遍历ViewBag.A到ViewBag.Z的所有属性,当对应字母的ViewBag属性存在时,执行后续循环逻辑。
内容的提问来源于stack exchange,提问作者user22133709
相关产品推荐
相关产品推荐

