Я пытаюсь найти наилучший способ использования модели представления в случае создания нового объекта.
У меня очень простая модель представления, которая содержит контактный объект и список избранных компаний.
private ICompanyService _Service;
public SelectList ContactCompanyList { get; private set; }
public Contact contact { get; private set; }
public ContactCompanyViewModel(Contact _Contact)
{
_Service = new CompanyService();
contact = _Contact;
ContactCompanyList = GetCompanyList();
}
private SelectList GetCompanyList()
{
IEnumerable<Company> _CompanyList = _Service.GetAll();
return new SelectList(_CompanyList, "id", "name");
}
Затем у меня есть контроллер контактов, который использует эту модель представления и позволяет мне выбрать связанную компанию для моего контакта.
[Authorize]
public ActionResult Create()
{
return View(new ContactCompanyViewModel(new Contact()));
}
Моя проблема связана с методом create на контроллере.
[Authorize]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Contact _Contact)
{
try
{
_Service.Save(_Contact);
return RedirectToAction("Index");
}
catch
{
return View();
}
}
Проблема в том, что представление возвращает пустой контактный объект, но!идентификатор компании заполнен, это потому, что раскрывающийся список явно объявляет имя своего поля.
@Html.DropDownList("parent_company_id",Model.ContactCompanyList)
Стандартные поля формы html передают значения объектов в формате contact.forename
при использовании HTML.EditorFor
хелпер ...
@Html.EditorFor(model => model.contact.forename)
Я могу получить к ним доступ, если использую FormCollection
в качестве моего параметра метода создания действия, а затем явно ищу contact.value
, но не могу использовать объект Contact в качестве параметра для сохранениямой код хорош и чист и не должен каждый раз создавать новый контактный объект.
Я попытался передать реальный объект модели представления обратно в качестве параметра, но это просто приводит к ошибке конструктора (что сбивает с толку видение, поскольку представление связано с моделью представления, а не с объектом контакта).
Есть ли способ, которым я могу определить имя поля Html.EditFor
, чтобы значение корректно отображалось обратно в объект контакта при передаче обратно методу create action на моем контроллере?Или я где-то допустил ошибку FUBAR (это наиболее вероятное объяснение, поскольку это учебное упражнение!).