Не удается получить значения из представления (сначала с кодом MVC)

#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