リンクされた他のモデルのコレクションを持つモデルの編集に問題があります。モデルクラスで厳密に型指定されたビューを使用しています:
public class GroupViewModel
{
public GroupViewModel()
{
Group = new Group();
Sections = new List<Section>();
}
public Group Group { get; set; }
public IEnumerable<Section> Sections { get; set; }
}
コントローラーの Edit メソッドで、両方のフィールドに正しいデータを入力し、それをビューに渡します。ビューモデルを正しく表示するビュー、複数選択が表示され、渡されたデータで満たされます。グループについても同じです。
しかし、フォーム送信時にそれを送り返した後、ModelState で「タイプ 'System.String' からタイプ 'Myapp.Models.Section' へのパラメーターの変換に失敗しました。これらのタイプ間で変換できるタイプ コンバーターがないためです。 "
ASP.NET が子コレクションを正しく処理するのか、それとも古い FormCollection を使用して処理する必要があるのか?
UPD: セクションがクラスであるため、アプリケーションが解析された int をセクションに変換できない可能性があり、一部のフィールドがクライアントから取得されない可能性があります (実際には、ID と名前のみを使用して複数選択しますが、他のフィールドは省略されます)。
UPD1:一時的な解決策として、コードを次のように変更しました。
public class GroupViewModel
{
public GroupViewModel()
{
Group = new Group();
Sections = new List<Section>();
}
public Group Group { get; set; }
public IEnumerable<int> SectionsIds { get; set; } //here
public IEnumerable<Section> SectionsDS { get; set; } //as here
}
ビューでは、次のようにバインドしています。
@Html.ListBoxFor(x => x.SectionIds,
new MultiSelectList(Model.SectionsDS, "Id", "Name"));
そして、ビューモデルを取得した後、2 つのコレクション (仮想ナビゲーションと ID を手動で同期) を同期します。