【问题标题】:How to check if a List in a ViewBag contains string如何检查 ViewBag 中的列表是否包含字符串
【发布时间】:2017-05-25 10:19:27
【问题描述】:

我有一个 ViewBag,它是我在控制器中创建的列表:

 List<string> listoflists = new List<string>();

然后它会被一些字符串填充,例如:

listoflists.Add("java");
listoflists.Add("php");
listoflists.Add("C#");

将其添加到 ViewBag: ViewBag.listoflists = listoflists;

然后我想检查我的视图是否包含特定字符串:

@if(ViewBag.listoflists.contains("java")
{
// do html stuff
}

但运行时出现以下错误:

System.Collections.Generic.List 不包含 contains 的定义

我做错了什么,或者我应该如何检查列表中是否包含视图中的内容?

【问题讨论】:

    标签: c# asp.net-mvc collections contains


    【解决方案1】:

    您可能需要转换回字符串列表:

    @if (((IList<string>)ViewBag.listoflists).Contains("java")
    {
        // do html stuff
    }
    

    还要注意Contains 方法以大写C 开头。

    因此,正如您所见,在 ASP.NET MVC 中使用 ViewBag 完全是废话,导致您的视图中出现非常丑陋的代码。出于这个原因,强烈建议使用包含特定视图的所有必要信息并且是强类型的视图模型。

    所以别废话了ViewBag,开始使用视图模型:

    public class MyViewModel
    {
        public IList<string> ListOfLists { get; set; }
    }
    

    您的控制器操作可以填充并传递给视图:

    public ActionResult Index()
    {
        var model = new MyViewModel();
        List<string> listoflists = new List<string>();
        listoflists.Add("java");
        listoflists.Add("php");
        listoflists.Add("C#");
        model.ListOfLists = listoflists;
        return View(model);
    }
    

    现在您可以对该模型有一个强类型视图,这将允许您避免之前的强制转换:

    @model MyViewModel
    
    @if (Model.ListOfLists.Contains("java"))
    {
        // do html stuff
    }
    

    所以基本上每次您在 ASP.NET MVC 应用程序中使用 ViewBag/ViewData 时,您的脑海中都会立即响起警报,告诉您:伙计,到底是什么,您做错了。只需使用视图模型,以避免将您的视图转换为完全不相关的 C# 语言结构(如铸造和其他东西)的可恶混乱。视图用于显示标记。

    【讨论】:

      【解决方案2】:

      ViewBag 是一个动态类型,它在编译时不知道你定义的键 ViewBag.listoflists 中包含的实际类型是什么,你需要将它转换为特定类型,然后你可以在上面调用这些方法:

      @{
      
      List<string> languages= ViewBag.listoflists as List<string>;
      }
      @if(languages.contains("java")
      {
      // do html stuff
      }
      

      【讨论】:

      • 您不需要 强制转换 - 它只是在编译时识别实际错误。
      • 为了编译时智能,我们需要转换我的意思
      猜你喜欢
      • 2017-02-10
      • 2013-01-01
      • 2022-12-13
      • 1970-01-01
      • 2020-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      相关资源
      最近更新 更多