У меня есть модель Project, которая имеет следующие свойства (для краткости упрощена).
[DataContract(IsReference = true)]
public class Project
{
[Key]
[DataMember]
public int id { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public DateTime CreatedDate { get; set; }
}
Модель также является контрактом данных для службы WCF, которая использует Entity Framework 4 для запроса хранилища данных. Код для этой модели генерируется из шаблона, который автоматически генерирует слой службы CRUD для модели Entity Framework.
Теперь у моего приложения MVC2 есть представление, содержащее форму для редактирования полей. Действие Controller Edit принимает всю модель в качестве аргумента при POST.
[HttpPost]
public ActionResult Edit(Project project)
{
var context = new ServiceContext();
try
{
if (ModelState.IsValid)
{
project = context.UpdateProject(project);
return RedirectToAction("Index");
}
}
catch
{
ModelState.AddModelError("", "Could not save project");
}
return View(project);
}
Теперь моя проблема в том, что когда форма отправляется на контроллер, модель Project правильно заполняет все поля , кроме для свойства 'id', которое по умолчанию равно 0.
Я немного покопался и попросил дядю Гугла найти ответы, но самое близкое исправление, которое я смог получить, - добавить следующее в класс модели:
[Bind(Include="id")]
, который работает нормально, но ТОЛЬКО заполняет свойство 'id', что означает, что мне придется явно указывать каждое свойство, которое будет включено в привязку модели. Очевидно, что это может быть неприятно, тем более что сама модель обладает на много * на 1017 * больше свойств, чем те, которые я показывал выше.
Есть ли другой способ заставить это работать?
Суть в том, что атрибут [Key] как-то связан с этим, но я ничего не смог понять.
Форма имеет скрытый ввод для свойства 'id'.
<%: Html.HiddenFor(model => model.id)%>