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

我想结合以上两个AddressSets

我试过了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>
4

2 回答 2

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());
于 2012-05-11T23:42:05.933 回答
0

如果您想使用编辑器模板,为什么要编写foreach循环?你根本不需要这个循环。只需编写以下内容并摆脱foreach

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

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

@model Address
...
于 2012-05-11T16:57:12.180 回答