2

我正在尝试编辑记录。我有默认路线。
当我单击提交按钮时,UpdateModel 行出现异常:
无法更新“MyProject.Mvc.Models.Product”类型的模型。
在页面上 ProductId 字段的验证提示 value is invalid:
The value '9' is invalid. 9 是我要编辑的记录的 ID。有什么问题?

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);

然后不会抛出异常并且数据库中的数据不会更新。

[编辑]

我正在使用实体框架

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;
      }
  }
}
4

3 回答 3

0

你能发布你的模型源代码吗?模型是否具有您要更新的类的字段或仅将此类作为对象(产品)?问题可能存在,因为当您的模型具有对象产品时,您应该将类​​名传递给 UpdateModel 方法前缀...

于 2010-03-04T07:25:34.147 回答
0

问题UpdateModel(product, "Product");是您使用相同的前缀 ( Product) 作为Product类名。尝试使用不同的前缀。为此,您可能需要重命名该类的Product属性ProductFormViewModel

于 2010-03-06T09:12:05.107 回答
0

需要修改身份证吗?如果 ID 是表中产品的 PK,则可能是绑定问题。尝试

[MetadataType(typeof(ProductMetaData))]
[Bind(Exclude="ID")]
public partial class Product
{
  public Product()
  {
      // Initialize Product
      this.CreateDate = System.DateTime.Now;
  }
}
于 2010-03-11T10:59:57.810 回答