簡體   English   中英

如何檢查ViewBag中的列表是否包含字符串

[英]How to check if a List in a ViewBag contains string

我有一個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不包含包含的定義

我在做什么錯,或者我應該如何檢查列表中是否包含某些內容?

您可能需要回退到字符串列表:

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

還要注意, Contains方法以大寫字母C開頭。

如您所見,在ASP.NET中使用ViewBag MVC是一個完全廢話,導致視圖中的代碼非常丑陋。 因此,強烈建議使用視圖模型,該模型將包含特定視圖的所有必要信息,並且也應進行強類型化。

因此,請剪切此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#語言構造(如類型轉換和填充)的可惡的混亂。 視圖用於顯示標記。

ViewBag是動態類型,它在編譯時不知道您定義的鍵ViewBag.listoflists包含的實際類型是什么,您需要將其ViewBag.listoflists為特定類型,然后可以在其上調用這些方法:

@{

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM