asp.net-mvc – 为什么不在View中使用Linq
某处我不得不使用
linq语句从我的Model中选择一个结果集,该控制器在Index ActionResult中返回.
为了做到这一点,我用谷歌搜索“如何在视图剃须刀中使用linq”,我得到了结果,我的应用程序正常工作,但我看到一些建议说“不要在视图中使用 Linq”. 为什么我们不应该使用它,但它可能吗? 如果我不想使用它,解决方案是什么? 这是我的查询: @using System.Linq @{var lst = (from x in item.Showtimes select x.ShowtimeDate).Distinct();} @foreach (var showTimeItem in lst) { <option value="@showTimeItem">@showTimeItem</option> } UPDATE 这是我的控制器索引 public ActionResult Index() { MelliConcert.Models.MelliConcertEntities db = new Models.MelliConcertEntities(); var listOfConcerts = (from x in db.Concert orderby x.ID ascending select x).Take(15).ToList(); return View(listOfConcerts); } 我在这个视图中使用它: @model IEnumerable<MelliConcert.Models.Concert> @foreach (var item in Model) { @if (item.OpenedForFirst == true) { //... } //Some Codes @using System.Linq @{var lst = (from x in item.Showtimes select x.ShowtimeDate).Distinct();} @foreach (var showTimeItem in lst) { <option value="@showTimeItem">@showTimeItem</option> } } 我的linq语句放在这个循环中. 解决方法
在视图中使用LINQ本身没有任何错误.问题不是你正在使用LINQ,问题是你这样做:
@{var lst = (from x in item.Showtimes select x.ShowtimeDate).Distinct();} 每当您必须在视图中声明和设置变量时,这可能表示您需要修改模型.为此,您的视图模型应该具有属性.像这样的东西: public IEnumerable<SomeType> DistinctShowtimes { get { return (from x in item.Showtimes select x.ShowtimeDate).Distinct(); } } 然后在视图中关于LINQ的观点变得毫无意义,因为您需要的是: @foreach (var showTimeItem in Model.DistinctShowtimes) { <option value="@showTimeItem">@showTimeItem</option> } 更新(回应您更新的问题): 现在问题(虽然略少于一个)是这样的: @model IEnumerable<MelliConcert.Models.Concert> 虽然这很好,但它是有限的.你正在经历的是这种限制.你问自己,“我怎么回报一个以上的东西?”答案是为该视图创建自定义视图模型.现在,您的视图绑定到Concert对象的枚举.哪个好,如果这就是它需要的全部.但事实证明,并非所有需要.它有一些需要更多的自定义逻辑.因此,您可以创建自定义视图模型.像这样的东西: public class ConcertsViewModel { public IEnumerable<Concert> Concerts { get; set; } // other properties,methods,anything } 然后在您的控制器操作中,您将返回其中一个: public ActionResult Index() { using(var db = new Models.MelliConcertEntities()) { var concertsModel = new ConcertsModel(); concertsModel.Concerts = (from x in db.Concert orderby x.ID ascending select x).Take(15).ToList(); return View(concertsModel); } } (另请注意using语句的使用,在使用IDisposable资源时应始终使用该语句.) 所以现在你的视图仍然是获取Concert对象的列表,但是它被打包在一个自定义视图模型中,你可以在其上添加该视图所需的更多功能.接下来,在您的视图中,更改模型声明: @model MelliConcert.Models.ConcertsViewModel (这假设您将它放在Models命名空间中.根据应用程序的规模,您可能希望将视图模型分解为它们自己的命名空间.我不经常在实际应用程序中使用Models命名空间来获取核心业务对象,所以我们的项目结构可能非常不同.这应该让你前进,但你要确保你的问题保持清晰分开.) 然后在视图代码中,您可以从该对象引用所需内容.因此,如果您需要访问列表,而不是仅调用类似@foreach(模型中的var项)的内容,则可以调用@foreach(model.Concerts中的var项). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 在WebForms中调试时关闭捆绑/缩小
- asp.net – InvalidOperationException Nullable对象必须具
- xamarin – ASP.NET核心Web API与ASP.NET核心应用程序
- ASP NET CORE – ANGULAR NO’Access-Control-Allow-Origin
- 如何在asp.net网站上使用aspnetdb数据库
- asp.net – 使用CompareValidator控件将用户输入日期与今天
- datetime – 日期格式dd / MM / yyyy在asp.net mvc 5中不起
- 高流量ASP.NET MVC编码注意事项
- 在ASP.NET MVC 3中使用Ajax和JsonResult
- asp.net-mvc – 如何进入MVC4源代码,而无需构建程序集
- asp.net-mvc-3 – 错误:asp.net mvc3中当前上下
- asp.net-mvc – 不使用SignalR时,ELMAH中出现Sig
- asp.net-mvc – 当模型绑定包含bool时,表单集合必
- asp.net-mvc-4 – 如何在asp.net MVC4查看页面中
- asp.net-mvc – 在ASP.NET MVC中的NHibernate会话
- asp.net – IIS(动态和静态)缓存,OutPutCache和浏
- 在asp.net c中添加Master页面后,MySql主机出错
- asp.net – 如何验证文件上传的文件类型?
- asp.net-mvc – ASP.NET MVC和LINQ一般问题
- asp.net – app_offline替代方案