Это все виды неправильных действий.
Вы должны использовать определенные ViewModel для ваших действий по редактированию и созданию.
Определите отдельный класс, содержащий свойства, которые вы хотите редактировать, и любую проверку пользовательского интерфейса.:
public class EditProductViewModel {
[HiddenInput]
public int Id {get;set;}
[Required]
public string Name {get;set;}
[Required]
public string Description {get;set;}
public HttpPostedFileBase Image {get;set;}
}
Затем измените свой метод действия следующим образом:
[HttpPost]
public ActionResult Edit(EditProductViewModel viewModel) {
if (ModelState.IsValid) {
var product = repository.Products.FirstOrDefault(p => p.Id == viewModel.Id);
// TODO - null check of product
// now lefty righty
product.Name = viewModel.Name;
product.Description = viewModel.Description;
if (viewModel.Image.ContentLength > 0) {
product.ImageMimeType = image.ContentType; // wouldn't trust this (better to lookup based on file extension)
product.ImageData = new byte[image.ContentLength];
image.InputStream.Read(product.ImageData, 0, image.ContentLength);
}
repository.SaveProduct(product);
return RedirectToAction("Index");
}
return View(viewModel);
}
Вот хороший пост , в котором обсуждается шаблон ViewModel.