#asp.net-mvc #ef-code-first
#asp.net-mvc #ef-code-first
Вопрос:
Вот как я заполняю представление из PersonInformation viewmodel..
@model Client.Models.PersonInformation
<fieldset>
<legend>Contact Information</legend>
@foreach (var item in Model.MemberContacts)
{
<div class="editor-label">
@Html.DisplayFor(model => item.MemberContactDescription)
</div>
<div class="editor-field">
@Html.EditorFor(model => item.ContactInformation)
@Html.ValidationMessageFor(modelitem => item.MemberContactDescription)
</div>
}
</fieldset>
И ViewModel
public class PersonInformation
{
public Person person { get; set; }
public Address premiseAddress { get; set; }
public Address billingAddress { get; set; }
private ICollection<MemberContact> _MemberContacts { get; set; }
public virtual ICollection<MemberContact> MemberContacts
{
get { return _MemberContacts ?? (_MemberContacts = new HashSet<MemberContact>()); }
set { _MemberContacts = value; }
}
public PersonInformation()
{
BIMemberService lib = new BIMemberService();
ICollection<MemberContact> mcs = new List<MemberContact>();
foreach (ContactLib itm in lib.ContactLibs())
{
MemberContact mc = new MemberContact();
mc.MemberContactDescription = itm.Description;
mc.ContactLibID = itm.ContactLibId;
mc.ContactInformation = "test";
mcs.Add(mc);
MemberContacts.Add(mc);
}
}
}
Но у этого (который имеет текстовое поле ввода) нет значения для действия post.
@Html.EditorFor(model => item.ContactInformation)
Это мое действие post.
[HttpPost]
public ActionResult PersonInformation(PersonInformation member)
{
if (ModelState.IsValid)
{
db.Apply(member);
return View("Requirements", member.person.MemberRequirements);
}
return View(member);
}
Прослеживая код, строка ниже выдает нулевое значение
member.MemberContacts.ContactInformation
Любой совет, высоко ценится.
Спасибо
Ответ №1:
Вы пытаетесь использовать редактор для с произвольным элементом коллекции.
попробуйте прочитать этот пост . Это должно дать вам некоторое представление о привязке коллекции
Ответ №2:
Связыватель модели по умолчанию может привязывать поля только к простым свойствам вашей модели. Вам необходимо реализовать свой собственный model binder.
Проверьте это по адресу: http://odetocode.com/blogs/scott/archive/2009/04/27/6-tips-for-asp-net-mvc-model-binding.aspx