Ste*_*ler 0 c# collections asp.net-mvc contains
我有一个ViewBag,它是我在控制器中创建的列表:
List<string> listoflists = new List<string>();
Run Code Online (Sandbox Code Playgroud)
然后它会填充一些字符串,例如:
listoflists.Add("java");
listoflists.Add("php");
listoflists.Add("C#");
Run Code Online (Sandbox Code Playgroud)
将其添加到ViewBag:ViewBag.listoflists = listoflists;
我想在我的View中检查它是否包含特定的字符串:
@if(ViewBag.listoflists.contains("java")
{
// do html stuff
}
Run Code Online (Sandbox Code Playgroud)
但是在运行时我收到以下错误:
System.Collections.Generic.List不包含contains的定义
我做错了什么,或者如何查看列表中是否包含某些内容?
您可能需要强制转换为字符串列表:
@if (((IList<string>)ViewBag.listoflists).Contains("java")
{
// do html stuff
}
Run Code Online (Sandbox Code Playgroud)
另请注意,该Contains方法以大写字母开头C.
因此,您可以看到在ASP.NET MVC中使用ViewBag是一个完整的垃圾,导致您的视图中非常难看的代码.因此,强烈建议使用视图模型,该视图模型将包含特定视图的所有必要信息,并且也是强类型的.
所以切掉这个ViewBag垃圾并开始使用视图模型:
public class MyViewModel
{
public IList<string> ListOfLists { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
您的控制器操作可以填充并传递给视图:
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);
}
Run Code Online (Sandbox Code Playgroud)
现在你可以对这个模型有一个强类型视图,这将允许你避免以前的转换:
@model MyViewModel
@if (Model.ListOfLists.Contains("java"))
{
// do html stuff
}
Run Code Online (Sandbox Code Playgroud)
所以基本上每次在ASP.NET MVC应用程序中使用ViewBag/ViewData时,警报都会立即响起,告诉你:伙计,你到底做错了什么.只需使用视图模型,以避免将您的视图转换为完全无关的C#语言结构(如转换和填充).视图用于显示标记.
| 归档时间: |
|
| 查看次数: |
5170 次 |
| 最近记录: |