如何在 Asp.NET MVC 视图名称空间中使用 List 或 IList 代替 IEnumerable?
Posted
技术标签:
【中文标题】如何在 Asp.NET MVC 视图名称空间中使用 List 或 IList 代替 IEnumerable?【英文标题】:How to use List or IList in place of IEnumerable in Asp.NET MVC Views name spaces? 【发布时间】:2022-01-10 20:46:33 【问题描述】:我对 IList 的理解是它同时实现了 IEnumerable 和 ICollection。 而List是IList接口的具体实现。
所以我在视图命名空间中多次使用 IEnumerable 来迭代模型对象。 但是在命名空间中使用 IList 或 List 时,我得到了一个
“/”应用程序中的服务器错误
所以,
-
为什么会这样?和
如果我想使用 List 或 IList 应该怎么做?
控制器中的动作:
private DummyProjectContext db = new DummyProjectContext();
// GET: BankAccounts
public ActionResult Index()
List<BankAccount> ba = db.BankAccounts.ToList();
return View(ba);
索引.cshtml:
@model IList<DummyProject.Models.BankAccount>
@
ViewBag.Title = "Index";
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.Amount)
</th>
<th></th>
</tr>
@foreach (var item in Model)
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Amount)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new id=item.Id ) |
@Html.ActionLink("Details", "Details", new id=item.Id ) |
@Html.ActionLink("Delete", "Delete", new id=item.Id )
</td>
</tr>
</table>
好吧,我知道 IEnumerable 对于这个例子来说已经足够了,应该使用它。我想知道为什么使用 IList 或 List 会出现此错误?
【问题讨论】:
需要添加using语句System.Collections.Generic
嗯,我已经在我的控制器中使用了这个命名空间并在视图中进行了尝试,类似的东西:[@using System.Collections.Generic]。但这没有用。你能详细说明你在说什么
@Subhadeep:似乎与使用IList
无关。再检查一次:将IList
替换为IEnumerable
并再次运行。
@Jackdaw 我在问题中提到,使用 IEnumerable 我得到了想要的结果。我的问题是为什么我们不能在这里使用 List 或 IList ?或者应该使用 List 的场景是什么?
@Subhadeep:请显示所有错误描述(应该是黄页)。 Server Error in '/' Application.
只是标题。
【参考方案1】:
你会在这里得到一个错误。使用 Inumerable 将解决此错误。
@Html.DisplayNameFor(model => model.Name)
...
@Html.DisplayNameFor(model => model.Amount)
...
【讨论】:
【参考方案2】:我创建了 Asp.net 项目并添加了一个虚拟列表,但我没有收到该错误可能您的列表对象为空。
控制器:
var s=new List<string>();
s.add("test");
return view(s);
view:
@model IList<string>
<ul>
@foreach(var item in Model)
<li>item</li>
</ul>
更多疑难解答: 当您运行项目以查看完整错误时,请复制错误的所有堆栈跟踪。可能是其他原因造成的。
【讨论】:
【参考方案3】:您的问题中的代码包含两个错误并且无法编译:
@Html.DisplayNameFor(model => model.Name)
...
@Html.DisplayNameFor(model => model.Amount)
...
您必须修复这些错误。
更新:
只是为了测试,尝试将上面的两行替换为:
@Html.DisplayNameFor(model => Model.FirstOrDefault().Name)
和
@Html.DisplayNameFor(model => Model.FirstOrDefault().Amount)
使用@model IList<DummyProject.Models.BankAccount>
如果会有任何变化,请告诉我。
【讨论】:
是的,你是对的。使用 IEnumerable以上是关于如何在 Asp.NET MVC 视图名称空间中使用 List 或 IList 代替 IEnumerable?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ASP.NET MVC 视图中将主键转换为实际名称/描述符字段
如何在 ASP.NET MVC 3 中为填充的下拉列表创建视图模型