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

上記の 2 つの AddressSet を結合したい

私は試したIEnumerable<Addresses> AllAddresses=AddressSet1.Concat(AddressSet2)

しかし、この後、かみそりビューで IEnumerable AllAddresses からアイテムにアクセスしようとすると

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

エラーが発生しています - パスに不正な文字があります。このエラーの原因を特定するための提案はありますか?

Concat を使用せずにページを実行しようとすると、AddressSet1 /AddressSet2 のレコードがページに表示されます。ただし、2 つを組み合わせて 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 に答える