如何在foreach循环中迭代ViewBag名称?

问题描述 投票:0回答:2

我设法在SO中找到有关遍历ViewBag对象的问题,但是我的问题是如何使用迭代在其中命名ViewBag

但是从头开始。在我的[[Razor View内部,有一个代码,该代码根据传递的ViewBag

触发脚本@if (ViewBag.TermsChecked == "false") { <script type="text/javascript"> document.getElementById("termschecked").style.border = "2px solid #E24941"; </script> } else if (ViewBag.TermsChecked == "true") { <script type="text/javascript"> document.getElementById("termschecked").style.border = "unset"; </script> } @if (ViewBag.LoginCaptchaChecked == "false") { <script type="text/javascript"> document.getElementById("logincaptchachecked").style.border = "2px solid #E24941"; </script> } else if (ViewBag.LoginCaptchaChecked == "true") { <script type="text/javascript"> document.getElementById("logincaptchachecked").style.border = "unset"; </script> } @if (ViewBag.RegisterCaptchaChecked == "false") { <script type="text/javascript"> document.getElementById("registercaptchachecked").style.border = "2px solid #E24941"; </script> } else if (ViewBag.RegisterCaptchaChecked == "true") { <script type="text/javascript"> document.getElementById("registercaptchachecked").style.border = "unset"; </script> } @if (ViewBag.CaptchaChecked == "false") { <script type="text/javascript"> document.getElementById("captchachecked").style.border = "2px solid #E24941"; </script> } else if (ViewBag.CaptchaChecked == "true") { <script type="text/javascript"> document.getElementById("captchachecked").style.border = "unset"; </script> }
保持它

DRY

我想通过ViewBag名称创建一个循环,但是我不确定如何在循环中将item传递给ViewBag名称。到目前为止,我已经尝试了2种方法,但是没有用:@{string[] viewbags = new string[] { ViewBag.TermsChecked, ViewBag.LoginCaptchaChecked, ViewBag.RegisterCaptchaChecked, ViewBag.CaptchaChecked };} @foreach (string item in viewbags) { if (item == "false") { <script type="text/javascript"> document.getElementById("@item.ToLower()").style.border = "2px solid #E24941"; </script> } else if (item == "true") { <script type="text/javascript"> document.getElementById("@item.ToLower()").style.border = "unset"; </script> } }

@{string[] viewbags = new string[] { "TermsChecked", "LoginCaptchaChecked", "RegisterCaptchaChecked", "CaptchaChecked" }} @foreach (string item in viewbags) { @if (ViewBag.item == "false") { <script type="text/javascript"> document.getElementById("@item.ToLower()").style.border = "2px solid #E24941"; </script> } else if (ViewBag.TermsChecked == "true") { <script type="text/javascript"> document.getElementById("@item.ToLower()").style.border = "unset"; </script> } }

两者都没有像应该那样触发任何脚本。
asp.net-core razor viewbag
2个回答
0
投票
您可以尝试像这样修改您的Viewbag:

public IActionResult Index() { List<Item> items = new List<Item>(); items.Add(new Item { key = "LoginCaptchaChecked", value = "false" }); items.Add(new Item { key = "RegisterCaptchaChecked", value = "true" }); ViewBag.showHidelist = items; return View(); } public class Item { public string key { get; set; } public string value { get; set; } }

并且在页面中,您可以使用:]动态设置边框。

@foreach (var item in ViewBag.showHidelist) { if (@item.value=="true") { <script type="text/javascript"> document.getElementById("@item.key.ToLower()").style.border = "2px solid #E24941"; </script> } else { <script type="text/javascript"> document.getElementById("@item.key.ToLower()").style.border = "unset"; </script> } }


0
投票
使用

for

© www.soinside.com 2019 - 2024. All rights reserved.