2011-06-26 9 views
0

エンティティ・フレームワークで外部キーを使用すると、POSTを実行するときに外部キー・オブジェクトがNULLになります。私はMVC3とEF 4.1を使用しています。商品と商品の詳細が2つあります。私は、RazorビューでHTMLヘルパーを使用してそれらを公開しています。 GETが発生すると、製品の詳細が表示されます。しかし、フォームを送信してサーバーに投稿すると、商品詳細コレクションはnullになります。私はすべての変更を失う。EF4.1 MVC3での外部キーテーブルの更新。 POSTでオブジェクトがnullです

私が間違っていることは何ですか?

ありがとうございました!

コード(それはかなり長いですので、私はそれを短縮):

データベース:

Table Product 
{ 
    int Id 
    varchar Name 
} 

Table ProductDetails 
{ 
    int id, 
    int ProductId, <- foreign key SQL 2008 to Product Table 
    varchar Details 
} 


View: 
@model WebSite.Models.Product 
@{ 
    ViewBag.Title = "MyLifeSaverStoreInfo"; 
} 

@Html.TextBoxFor(m => m.Product.Name) 
@Html.TextBoxFor(m => m.Product.ProductDetails.FirstOrDefault().Description) 

Controller: 
public ActionResult EditProduct(int productId) 
{ 
    var Product = _productRepository.GetProduct(productId); 
    return View(product); 
} 


[HttpPost] 
public ActionResult EditProduct(Product model) 
{ 
    string name = model.Name; <- this update comes through 
    string description = model.ProductDetails.FirstorDefault().Description; 
} 

おかげ

+0

この質問を書いたとき、あなたがこれまでに持っていたコードの一部を投稿することは重要ではないと思われましたか?私が質問をしていたなら、私はこれまでに試したコードを提供しているはずです。問題を再現するための完全なシナリオ(モデル、コントローラ、ビュー)を提供できれば最適です。 –

+0

投稿を更新しました。ありがとう –

答えて

0

がそれを手に入れました!

POST EditProductメソッドで「Product」エンティティを作成する代わりに、フォームコレクションを使用し、そのフォームコレクションに従って各製品の詳細を設定して保存します。なぜそれが最初の方法で動作しないのか分かりません。私は手動で外部参照を更新しています。たぶん私は何かを逃している?

[HttpPost] 
public ActionResult EditProduct(int id, FormCollection formCollection) 
{ 
    var model = new MyLSstoreInfoViewModel{ 
            StoreCurrent = _profileRepository.GetProduct(Id) 
              }; 
    var productDetails = model.Product.ProductDetails.Where(p => p.productId == id).Single(); 


      productDetaisl.Details = formCollection["details"]; 
      if (TryUpdateModel(model.StoreCurrent)) 
      { 

       _profileRepository.Save(); 

      } 
} 
0

それは少し遅れてですが、将来的に誰かのために多分便利:

ビューに隠し入力として参照子の主キーを渡すと、それが正しく子モデルを解決しますアクションで

関連する問題