Никогда не используйте свои доменные объекты в качестве аргументов действия и никогда не передавайте свои доменные объекты своим представлениям.Я бы порекомендовал вам использовать модели просмотра.В модель представления вы включите только те свойства, которые вы хотите привязать к представлению.Модель представления - это класс, который специально адаптирован к требованиям данного представления.
public class VoucherViewModel
{
public int ID { get; set; }
public string Title { get; set; }
public string SiteName { get; set; }
public string DealURL { get; set; }
public DateTime? ExpirationDate { get; set; }
public string VoucherFileURL { get; set; }
}
, а затем:
[HttpPost]
public ActionResult Edit(VoucherViewModel model)
{
// TODO: if the view model is valid map it to a model
// and pass the model to your DAL
// To ease the mapping between your models and view models
// you could use a tool such as AutoMapper: http://automapper.org/
...
}
ОБНОВЛЕНИЕ:
ВВ разделе комментариев @ Rick.Anderson-at-Microsoft.com указывается, что, хотя я и ответил на ваш вопрос, я не объяснил, откуда возникла проблема.
Дело в том, что DateTime
- это тип значения, означающий, что он всегда будет иметь значение.[Bind(Exclude = "AddedDate")]
прекрасно работает и делает то, что должен делать => он не связывает свойство AddedDate
из запроса.Как следствие, свойство будет иметь значение по умолчанию, которое для поля DateTime равно 1/1/0001 12:00:00 AM
, и когда он пытается сохранить его в SQL Server, оно прерывается, потому что SQL Server не поддерживает такой формат.