Я только изучаю ASP.NET MVC 3, и меня немного смущает, как я могу реализовать что-то вроде того, что показано в этой ссылке:
http://www.codethinked.com/easy-and-safe-model-binding-in-aspnet-mvc
Почему я 'м путать скорее всего основано на моем незнании предмета.В примере на странице, указанной выше, я вижу, что Джастин использует ViewModel, который напрямую содержит свойства его объекта "Person".
То, что я хочу сделать, похоже, но я хочу, чтобы ViewModel на самом деле содержал класс домена, который в моем случае является Company, а не Person.У меня есть класс Company, который сам реализует представления подмножества ViewModel (например, IEditCompanyAsUser).
То, что я пробовал до сих пор, выглядит примерно так:
public class Company : IValidatableObject, ICompanyUpdateAsUser
{
[Key]
[ScaffoldColumn(false)]
public virtual int CompanyID { get; set; }
[Required]
public virtual Boolean Active { get; set; }
[Required]
public virtual string Name { get; set; }
[Required]
public virtual string Phone { get; set; }
// Containing some more members below
}
С ICompanyUpdateAsUser, содержащимСвойства Я бы хотел, чтобы метод Edit моего контроллера обновлялся:
public interface ICompanyUpdateAsUser
{
bool Active { get; set; }
string Name { get; set; }
string Phone { get; set; }
}
И класс ViewModel, который выглядит следующим образом:
public class CompanyViewModel
{
public Company Company;
// Will be adding more members in the future
}
Что я не могу понять, это как правильно кодироватьконтроллер.Мой контроллер в настоящее время выглядит так:
/// <summary>
/// POST: /Company/Edit/5
/// </summary>
[HttpPost]
public ActionResult Edit([Bind(Prefix="Company")]Company model)
{
var company = _companyService.GetCompany(model.CompanyID);
if (company == null)
return RedirectToAction("Index");
if (ModelState.IsValid)
{
if (TryUpdateModel<ICompanyUpdateAsUser>(company))
{
_companyService.SaveCompany();
return RedirectToAction("Details", new { companyId = model.CompanyID });
}
}
return View(model);
}
Я знаю, что что-то абсолютно не так с моим кодом контроллера, но я не могу понять, какие компоненты мне нужно использовать для реализации такого шаблона?Нужно ли использовать связующее для нестандартной модели?Нужно ли использовать какую-то другую функцию ASP.NET MVC3 для реализации шаблона?
Буду признателен за любой совет.
Спасибо!
* РЕДАКТИРОВАТЬ *
То, что мне нужно сделать, это иметь сообщение "Изменить представление" назад "Компанияmsgstr "объект, затем обновите объект из базы данных значениями в опубликованной компании (в соответствии со свойствами интерфейса, переданными TryUpdateModel).Кажется, что все работает (проверка и т. Д.), Но TryUpdateModel (компания), похоже, не работает, хотя и оценивается как true.Когда я перебираю код с помощью отладчика, объект Company, извлеченный из БД, просто никогда не обновляется.
После еще большего чтения я определил, что метод TryUpdateModel обновляет переданный элемент из метода IValueProvider.Как связать переданный в «Модель компании» с IValueProvider для метода?