IEnumerable<Addresses> AddressSet1=myServices.GetAddresses(LocationId1);
IEnumerable<Addresses> AddressSet2=myServices.GetAddresses(LocationId2);
我想结合上面两个地址集
我尝试了IEnumerable<Addresses> AllAddresses=AddressSet1.Concat(AddressSet2)
但在此之后我尝试通过我的剃刀视图访问IEnumerable AllAddresses中的项目
@if(!myHelper.IsNullorEmpty(model.AllAddresses )
{
@Html.EditorFor(model => model.AllAddresses )
}
我收到错误 - 路径中存在非法字符。有什么建议可以找出导致此错误的原因吗?
如果我试图用Concat运行我的页面,我可以看到页面上显示的AddressSet1 / AddressSet2中的记录。但是当我尝试将两者组合成I Enumerable AllAddresses时,它会抛出错误请帮助
下面粘贴的是我的编辑模板@model MyServiceRole.Models.Addresses
@{
ViewBag.Title = "All addresses Items";
}
<table>
<tr>
<td>
<span>Index</span>
</td>
<td>
</tr>
<tr>
<td>Address XID</td>
<td>
@Html.EditorFor(model => model.AddressID)
</td>
</tr>
<tr>
<td>Title</td>
<td>
@Html.EditorFor(model => model.Title)
</td>
</tr>
<tr>
<td>Description</td>
<td>
@Html.EditorFor(model => model.Description)
</td>
</tr>
<tr>
<td>Image URL</td>
<td>
@Html.EditorFor(model => model.Photo.URL)
</td>
</tr>
</table>
答案 0 :(得分:2)
我测试了你的问题并遇到了同样的问题。
List<string> a = new List<string>{ "a" };
List<string> b = new List<string>{ "b" };
IEnumerable<string> concat = a.Concat<string>(b);
foreach(string s in concat) { } // this works
return View(concat);
在视图中:
@model IEnumerable<string>
@foreach(string s in Model) //This blows up
{
}
@Html.EditorFor(m => Model) //Also blows up
看起来你真的不能使用模板或枚举
System.Linq.Enumerable.ConcatIterator<T>
Concat
在视图中创建的类。这似乎是一个错误。
无论如何,添加.ToList()
会解决您的问题。
return View(concat.ToList());
答案 1 :(得分:0)
如果要使用编辑器模板,为什么要编写foreach
循环?你根本不需要这个循环。只需编写以下内容即可删除foreach
:
@Html.EditorFor(x => x.AllAddresses)
然后您显然会有一个相应的编辑器模板,ASP.NET MVC会自动为AllAddresses
集合的每个元素呈现这些模板,这样您就不需要在视图中编写任何foreach循环( ~/Views/Shared/EditorTemplates/Address.cshtml
):
@model Address
...