追加合并两个IEnumerable的项目(append two IEnumerable items)

2019-09-17 04:17发布

IEnumerable<Addresses> AddressSet1=myServices.GetAddresses(LocationId1);
IEnumerable<Addresses> AddressSet2=myServices.GetAddresses(LocationId2);

我想上面的两个AddressSets结合

我试图IEnumerable<Addresses> AllAddresses=AddressSet1.Concat(AddressSet2)

但在此之后,当我尝试从IEnumerable的AllAddresses访问项目通过我的Razor视图

 @if(!myHelper.IsNullorEmpty(model.AllAddresses )
   {
     @Html.EditorFor(model => model.AllAddresses  )
   }

而我得到的错误 - 路径。任何建议非法字符来确定该错误的原因是什么?

如果我想用出的毗连我能看到AddressSet1 / AddressSet2记录运行我的网页显示在页面上。但是,当我尝试将两者结合起来,形成我可枚举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>

Answer 1:

我测试您的问题和遇到同样的问题。

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());


Answer 2:

如果你要使用编辑模板为什么你写foreach循环? 你不需要这个循环的。 简单地写上如下,并摆脱了foreach

@Html.EditorFor(x => x.AllAddresses)

然后你会明显有相应的编辑器模板ASP.NET MVC将自动生成的每个元素AllAddresses集合,这样你就不需要写任何foreach循环在你的视图( ~/Views/Shared/EditorTemplates/Address.cshtml ):

@model Address
...


文章来源: append two IEnumerable items