Это происходит, когда я пытаюсь создать объект, используя действие Create style в Asp.Net MVC 2.
POCO обладает следующими свойствами:
public int Id {get;set;}
[Required]
public string Message {get; set}
При создании объекта идентификатор устанавливается автоматически, поэтому в действии Create нет необходимости.
ModelState говорит, что "поле Id обязательно", но я не установил, что это так. Здесь что-то автоматическое происходит?
РЕДАКТИРОВАТЬ - выявленная причина
Причина этого вопроса ответила Брэд Уилсон через Пола Сперанза в одном из комментариев ниже, где он говорит (приветствует Павла):
Вы предоставляете значение для ID, вы просто не знали, что были. Он в данных маршрута по умолчанию route ( "{controller}/{action}/{id}" ), и его значением по умолчанию является пустое string, что недопустимо для int. Используйте атрибут [Bind] на вашем параметр действия для исключения идентификатора. мой маршрут по умолчанию: new {controller = "Клиент", действие = "Изменить", id = "" }//Параметры по умолчанию
РЕДАКТИРОВАТЬ - техническая модификация модели
Я фактически изменил способ, которым я это сделал снова, используя TryUpdateModel и массив параметров exclude, соответствующий этому.
[HttpPost]
public ActionResult Add(Venue collection)
{
Venue venue = new Venue();
if (TryUpdateModel(venue, null, null, new[] { "Id" }))
{
_service.Add(venue);
return RedirectToAction("Index", "Manage");
}
return View(collection);
}