Как обновить с помощью MVC2 RC2 - PullRequest
2 голосов
/ 04 марта 2010

Я пытаюсь редактировать запись. У меня есть маршрут по умолчанию.
Когда я нажимаю кнопку отправки, я получаю исключение в строке UpdateModel:
Не удалось обновить модель типа «MyProject.Mvc.Models.Product».
На странице проверки поля ProductId запрашивается недопустимое значение:
Недопустимое значение «9». 9 - это идентификатор записи, которую я пытаюсь отредактировать. Что может быть не так?

public ActionResult Edit(int id)
{
  Product product = productRepository.GetProduct(id);

  return View(new ProductFormViewModel(product));
}

[HttpPost]
public ActionResult Edit(int id, FormCollection productFormViewModel)
{
   Product product = productRepository.GetProduct(id);
   try
   {
     // TODO: Add update logic here
     UpdateModel(product, "Product");
     productRepository.Save();
     return RedirectToAction("Index");
   }
   catch (Exception ex)
   {
      return View(new ProductFormViewModel(product));
   }
}

Если я изменю строку обновления модели на:

UpdateModel(product);

тогда исключение не выдается и данные не обновляются в базе данных.

[Изменить]

Я использую Entity Framework

namespace MyProject.Mvc.Models
{
  [MetadataType(typeof(ProductMetaData))]
  public partial class Product
  {
      public Product()
      {
          // Initialize Product
          this.CreateDate = System.DateTime.Now;
      }
  }

  public class ProductMetaData
  {
      [Required(ErrorMessage = "Product name is required")]
      [StringLength(50, ErrorMessage = "Product name must be under 50 characters")]
      public object ProductName { get; set; }

      [Required(ErrorMessage = "Description is required")]
      public object Description { get; set; }
  }

  public class ProductFormViewModel
  {
      public Product Product { get; private set; }

      public ProductFormViewModel()
      {
          Product = new Product();
      }

      public ProductFormViewModel(Product product)
      {
          Product = product;
      }
  }
}

Ответы [ 3 ]

0 голосов
/ 06 марта 2010

Проблема с UpdateModel(product, "Product"); заключается в том, что вы используете тот же префикс (Product), что и имя класса Product. Попробуйте использовать другой префикс. Для этого вам может потребоваться переименовать свойство Product класса ProductFormViewModel.

0 голосов
/ 11 марта 2010

Вам нужно отредактировать идентификатор?если идентификатор - это PK продукта в вашей таблице, то это может быть проблемой связывания.Попробуйте

[MetadataType(typeof(ProductMetaData))]
[Bind(Exclude="ID")]
public partial class Product
{
  public Product()
  {
      // Initialize Product
      this.CreateDate = System.DateTime.Now;
  }
}
0 голосов
/ 04 марта 2010

не могли бы вы опубликовать исходный код вашей модели?модель имеет поля класса, который вы хотите обновить, или только этот класс как объект (Product)?проблема может существовать, потому что, когда ваша модель имеет объект Product, вы должны перейти к префиксу метода UpdateModel с именем класса ...

...