2

レコードを編集しようとしています。デフォルトルートがあります。
送信ボタンをクリックすると、UpdateModel行で例外が発生します
。タイプ「MyProject.Mvc.Models.Product」のモデルを更新できませんでした。
このページでは、ProductIdフィールドの検証により、値が無効であることが示されています
。値「9」は無効です。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);

その後、例外はスローされず、データはデータベースで更新されません。

[編集]

EntityFrameworkを使用しています

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

モデルのソースコードを投稿してもらえますか?モデルには、更新するクラスのフィールドがありますか、それともオブジェクト(製品)としてこのクラスだけがありますか?モデルにオブジェクトProductがある場合、問題が存在する可能性があります。クラスの名前を使用してUpdateModelメソッドプレフィックスに渡す必要があります。

于 2010-03-04T07:25:34.147 に答える
0

の問題は、クラス名UpdateModel(product, "Product");と同じプレフィックス(Product)を使用していることです。Product別のプレフィックスを使用してみてください。このために、クラスのProductプロパティの名前を変更する必要がある場合があります。ProductFormViewModel

于 2010-03-06T09:12:05.107 に答える
0

IDを編集する必要がありますか?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 に答える