Если у меня есть пара объектов linqTOsql, которые я пытаюсь редактировать с помощью формы.
Во-первых, есть класс Stream
:
[Table]
public class Stream
{
[HiddenInput(DisplayValue = false)]
[Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
public long StreamID { get; set; }
/*other properties removes for brevity*/
// relationship (one stream to many Stream2FieldTypes)
// uses EntitySet<Stream2FieldTypes> and OtherKey for the FK in Stream2FieldTypes
private EntitySet<Stream2FieldTypes> _Stream2FieldTypes;
[System.Data.Linq.Mapping.Association(Storage = "_Stream2FieldTypes", OtherKey = "StreamID")]
public EntitySet<Stream2FieldTypes> Stream2FieldTypes
{
get { return this._Stream2FieldTypes; }
set { this._Stream2FieldTypes.Assign(value); }
}
}
Затем есть Stream2FieldTypes
класс:
[Table]
public class Stream2FieldTypes
{
[Column(IsPrimaryKey = true, IsDbGenerated = true, AutoSync = AutoSync.OnInsert)]
public long s2fID { get; set; }
/*other properties removed for brevity*/
[Column]
public long StreamID { get; set; } // FK
// relationship (one Stream2FieldTypes to Streams)
private EntitySet<Stream> _Stream;
[Association(Storage = "_Stream", ThisKey = "StreamID")]
public EntitySet<Stream> Stream
{
get { return this._Stream; }
set { this._Stream.Assign(value); }
}
}
Я использую репозиторий linqTOsql, чтобы получить эти объекты и отправить их в представление следующим образом:
public ActionResult StreamEdit(long id)
{
Genesis.Domain.Entities.Stream stream = genesisRepository.Streams.FirstOrDefault(x => x.StreamID == id);
return View(stream);
}
Все, что получает, отправляется в представление без проблем ...Но когда форма в представлении отправлена, Stream.Stream2FieldTypes
по какой-то причине теряется.Я улавливаю отправку формы с помощью этого действия:
[HttpPost]
public ActionResult StreamEdit( long id, Genesis.Domain.Entities.Stream form)
{
return View(form);
}
И представление без коллекции Stream2FieldTypes
.
Представление записывает Stream2FieldTypes следующим образом:
<% for (int i = 0; i < (Model.Stream2FieldTypes != null ? Model.Stream2FieldTypes.Count() : 0); i++) %>
<% { %>
<div class="ListItem">
Label: <%: Html.EditorFor(x => x.Stream2FieldTypes[i].s2fLabel, new { style="width:100px" })%>
Required: <%: Html.EditorFor(x => x.Stream2FieldTypes[i].s2fIsRequired)%>
Field Type ID": <%: Html.EditorFor(x => x.Stream2FieldTypes[i].FieldTypeID, new { style="width:20px;" })%>
Stream ID: <%: Html.EditorFor(x => x.Stream2FieldTypes[i].StreamID) %>
</div>
<% } %>
Почему механизм связывания моделей по умолчанию в mvc правильно связывает вложенную коллекцию?