追加两个IEnumerable项目

时间:2012-05-11 16:43:12

标签: asp.net-mvc-3 c#-4.0 razor

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>

2 个答案:

答案 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
...