在视图中使用foreach循环对ASP.NET中控制器中的字段进行迭代
本文关键字:控制器 字段 迭代 NET 视图 foreach 循环 ASP | 更新日期: 2024-09-21 17:40:57
我正在尝试迭代存储在ASP.NET MVC4项目中控制器字段中的IList。我试图在我的一个视图中做到这一点,以便能够生成与通过搜索查询收集的一些信息相对应的HTML元素。代码如下所示。
控制器
public class HomeController : Controller
{
public static int MovieHits;
public static int PeopleHits;
public static IList<Model.MovieDto> Movies;
public static IList<Model.PersonDto> People;
public ActionResult SearchResults(string input)
{
ViewBag.Title = "Search";
ViewBag.Message = "Your search returned the following match(es).";
var results = Model.ModelController.UniversalSearch(input);
Movies = results.MovieListForUser;
People = results.PersonListForUser;
MovieHits = Movies.Count;
PeopleHits = People.Count;
return View();
}
视图
<div id="movieResults">
@foreach (var movie in HomeController.Movies)
{
<span class="movieResult">@movie.Title</span><br/>
}
</div>
问题是,当浏览器试图生成HTML时,我在浏览器中遇到了编译错误。错误消息可以在下面看到,但要发出警告;谷歌已经把它从丹麦语翻译成了英语,但从外观上看,它看起来基本上可以理解
错误
描述:编译处理此请求所需的资源时出错。阅读以下有关错误的详细信息,并对源代码进行必要的更改。kompillingsfunktion:CS0012:在未引用的程序集中定义了类型"Model.MovieDto"。添加对程序集"Model,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null"的引用。来源错误:
Line 20: <td>
Line 21: <div id="movieResults">
Line 22: @ foreach (var movie inHomeController.Movies)
Line 23: {
Line 24: <span class="movieResult"> @ movie.Title < / span> <br/>
详细输出:
C: ' Program Files (x86) ' IIS Express> "C: ' Windows ' Microsoft.NET ' Framework ' v4.0.30319 ' csc.exe" / t: library / utf8output / R: "C: ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP.NET Files ' root ' 8eddbb6c ' 32280fad ' assembly ' dl3 ' 2296c65a ' 68000ed7_61f2ce01 ' WebGrease.dll "/ R:" C: ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP.NET Files ' root ' 8eddbb6c ' 32280fad ' assembly ' dl3 ' 27f75d7a ' 0852d4d4_61f2ce01 ' EntityFramework.dll "/ R:" C: ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP.NET Files ' root ' 8eddbb6c ' 32280fad ' assembly ' dl3 ' 5496f055 ' 42f708d7_61f2ce01 ' Antlr3.Runtime.dll " / R: "C: ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP.NET Files ' root ' 8eddbb6c ' 32280fad ' assembly ' dl3 ' 0ee8ac00 ' fe53add5_61f2ce01 ' System.Web.Http.dll" / R: "C: ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP.NET Files ' root ' 8eddbb6c ' 32280fad ' App_global.asax.of7azw0j.dll" / R: "C: ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP.NET Files ' root ' 8eddbb6c ' 32280fad ' assembly ' dl3 ' 998cd3c3 ' f48cb7d5_61f2ce01 ' System.Web.Http.OData.dll" / R: "C: ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP.NET / R: "C: ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP.NET Files ' root ' 8eddbb6c ' 32280fad ' assembly ' dl3 ' c455315f ' d0673bd4_61f2ce01 ' DotNetOpenAuth.Core.dll" / R: "C: ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP.NET / R: "C: ' Windows ' Microsoft.NET ' Framework ' v4.0.30319 ' Mscorlib.dll" / R: "C: ' Windows ' Microsoft.Net ' assembly ' GAC_MSIL ' System ' v4.0_4.0.0.0__b77a5c561934e089 ' System.dll" / R: "C: ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP . NET Files ' root ' 8eddbb6c ' 32280fad ' assembly ' dl3 ' 07cc8738 ' 3289a6d4_61f2ce01 ' DotNetOpenAuth.OpenId.dll "/ R:" C: ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP.NET Files ' root ' 8eddbb6c ' 32280fad ' assembly ' dl3 ' 33bc8f69 ' 9b5d66bd_4df8ce01 ' nunit.framework.dll "/ R:" C: ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP.NET Files ' root ' 8eddbb6c ' 32280fad ' assembly ' dl3 ' 93c58068 ' 93b2a5d5_61f2ce01 ' System.Net.Http.Formatting.dll " / R: "C: ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP.NET / R: "C: ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP.NET Files ' root ' 8eddbb6c ' 32280fad ' assembly ' dl3 ' 2f2e565f ' 5ed196d6_61f2ce01 ' Newtonsoft.Json.dll" / R: "C: ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP.NET Files ' root ' 8eddbb6c ' 32280fad ' assembly ' dl3 ' 3ca568a6 ' 56e0bed5_61f2ce01 ' System.Web.Http.WebHost.dll" / R: "C: ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP.NET Files ' root ' 8eddbb6c ' 32280fad ' assembly ' dl3 ' 2d57ee1b ' 804ef2d5_61f2ce01 ' Microsoft.Data.Edm.dll" / R: "C : ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP.NET / R: "C: ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP.NET Files ' root ' 8eddbb6c ' 32280fad ' assembly ' dl3 ' 6d3f6044 ' 23229fd5_61f2ce01 ' System.Web.Optimization.dll" / R: "C : ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP.NET Files ' root ' 8eddbb6c ' 32280fad ' assembly ' dl3 ' 895f125b ' 5996f043_56f8ce01 ' Webclient.dll " / R: "C: ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP.NET Files ' root ' 8eddbb6c ' 32280fad ' assembly ' dl3 ' ebbe30cd ' 47e537d6_61f2ce01 ' Microsoft.Data.OData.dll" / R: "C: ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP.NET Files ' root ' 8eddbb6c ' 32280fad ' assembly ' dl3 ' 51baa225 ' 4f2d9ad4_61f2ce01 ' DotNetOpenAuth.OAuth.dll" / R: "C: ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP.NET Files ' root ' 8eddbb6c ' 32280fad ' assembly ' dl3 ' cd36e272 ' f779c0d6_61f2ce01 ' System.Spatial.dll" / R: "C: ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP.NET Files ' root ' 8eddbb6c ' 32280fad ' assembly ' dl3 ' 96b97b00 ' 3ebd2ed4_61f2ce01 ' DotNetOpenAuth.AspNet.dll " / Out: "C: ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP.NET Files ' root ' 8eddbb6c ' 32280fad ' App_Web_searchresults.cshtml.a8d08dba.6gvjhlym.dll" / D: DEBUG / debug + / optimize-/ w : 4 / nowarn: 1659; 1699, 1701, 612, 618 / warnaserror-"C: ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP.NET Files ' root ' 8eddbb6c ' 32280fad ' App_Web_searchresults.cshtml.a8d08dba.6gvjhlym .0. cs "" C: ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP.NET Files ' root ' 8eddbb6c ' 32280fad ' App_Web_searchresults.cshtml.a8d08dba.6gvjhlym.1.cs "
Microsoft (R) Visual C # 2010 Compiler version 4.0.30319.17929
for Microsoft (R). NET Framework 4.5
Copyright (C) Microsoft Corporation. All rights reserved.
c: ' Users ' Emil ' Documents ' ITU ' 3 Semester ' BDSA Examn Project 2013 ' bdsa-project-2013 ' Program ' SSMDB ' WebClient ' Views ' Home ' SearchResults.cshtml (22,18): error CS0012: The type 'Model.MovieDto' is defined in the assembly that is not referenced to. Add a reference to the assembly 'Model, Version = 0.0.0.0, Culture = neutral, PublicKeyToken = null'.
c: ' Users ' Emil ' AppData ' Local ' Temp ' Temporary ASP.NET Files ' root ' 8eddbb6c ' 32280fad ' assembly ' dl3 ' 895f125b ' 5996f043_56f8ce01 ' Webclient.dll: (Location of symbol related to previous error)
c: ' Users ' Emil ' Documents ' ITU ' 3 Semester ' BDSA Examn Project 2013 ' bdsa-project-2013 ' Program ' SSMDB ' WebClient ' Views ' Home ' SearchResults.cshtml (24,54): error CS1061: 'Model.MovieDto' does not contain a definition for 'Title', and there was not found an extension method 'Title' accepting a first argument of type 'Model.MovieDto' (are you missing a "using' directive or an assemblyreference?)
我尝试重新添加对Model类的引用(它位于解决方案中,但在另一个项目中。我对Razor和ASP.NET都是新手,所以我在这里有点迷路了。我认为这可能是我的Web.config文件中的错误或ASP.NET临时文件中的一个错误,但试图通过这两个大小来解决问题是徒劳的ong。不过,请提前谢谢。
若要修复错误,请尝试将程序集所在的dto类添加到web.config中的编译程序集(请参阅修复错误CS0012)。但是
使用静态控制器字段将数据从控制器传递到视图不是一个好主意。您将如何处理多个同时请求?因此,使用ViewBag
或创建适当的模型并将其传递给视图:
public class SearchResultModel
{
public IList<Model.MovieDto> Movies { get; set; }
public IList<Model.PersonDto> People { get; set; }
}
创建并传递
public ActionResult SearchResults(string input)
{
ViewBag.Title = "Search";
ViewBag.Message = "Your search returned the following match(es).";
var results = Model.ModelController.UniversalSearch(input);
var model = new SearchResultModel {
Movies = results.MovieListForUser,
People = results.PersonListForUser
};
return View(model);
}
视图:
@model Your.Namespace.SearchResultModel
...
<td>
<div id="movieResults">
@foreach (var movie Model.Movies) {
<span class="movieResult"> @movie.Title </span><br/>
}
<span>Total movie hits: @Model.Movies.Count</span>
...
每个web请求都将导致单独的模型创建。