2016-03-26 14 views
0

こんにちは、エンティティフレームワークを使用して製品を更新する際に問題が発生しました。 開発者のツールからフォームを送信すると、フォームが[0] .Id = 3を送信していることを確認できます。フロントエンドから送信されたフォームデータは、コントローラで異なる結果を示します。ASP.NET MVC

しかし、私がモデルをデバッグしていたとき、debug.printはId 。ここで

私のコントローラは

public ActionResult Details(IList<Item> model) 
{ 
if (ModelState.IsValid) 
     { 
      Debug.Print(model[0].Id.ToString()); //This prints 0 
      Debug.Print(model[0].Name);// This prints correctly 
      Debug.Print(model[0].Size);// This prints correctly 
      Debug.Print(model[0].RetailPrice.ToString());// This prints correctly 
      Debug.Print(model[0].IsAvailable.ToString());// This prints correctly 
      for (int i = 0; i < model.Count(); i++) 
      { 
       ndb.Entry(model[0]).State = System.Data.Entity.EntityState.Modified; 
       ndb.SaveChanges(); 
      } 

      return RedirectToAction("ProductIndex"); 
     } 
     return View(model); 
    } 

で誰もが任意のアイデア理由を持っていますか?

EDIT:

using (Html.BeginForm()) 
{ 
@Html.AntiForgeryToken() 

<table> 
    <thead> 
     <tr> 
      <td>Name</td> 
      <td>Size</td> 
      <td>Price</td> 
      <td>Available</td> 
     </tr> 
    </thead> 
    @for (int i = 0; i < Model.Count(); i++) 
    { 
     <tr> 
      @Html.HiddenFor(m => m[i].Id) 
      @Html.HiddenFor(m => m[i].Name) 
      @Html.HiddenFor(m => m[i].Size) 
      @Html.HiddenFor(m => m[i].RetailPrice) 
      <td> 
       @Model[i].Name 
      </td> 
      <td> 
       @Model[i].Size 
      </td> 
      <td> 
       @Model[i].RetailPrice 
      </td> 
      <td> 
       @Html.CheckBox("["+i+"].IsAvailable", Model[i].IsAvailable) 
      </td> 
     </tr> 
    } 

    <tr> 
     <td> 
      <input type="submit" value="Save" class="btn btn-default" /> 
     </td> 
    </tr> 

</table> 
} 

そして、私は先に述べたように、フォームは、開発者ツールから提出正しいIDを示したが、それはコントローラに来たとき、それは常に私のIDとして0を与えます。

+0

そのフィールドを除いて他のすべてが機能している場合、Idにはセッターがないと感じています。あなたは 'Id'プロパティまたは単にゲッタにセッターを持っていますか? –

+1

'詳細'ビューコードを追加できますか?私はあなたが 'ID'ビューで定義されていないと思います – TheUknown

+0

@ Nava-Prev.Quetiこんにちは、Idプロパティはgetterとsetterを持っています。 –

答えて

0

ビュー内にIDフィールドがない可能性があります。 [表示]フィールドにIDフィールドを追加するか、プロパティにバインドする必要があります。

ビュー内でEFオブジェクトを使用することもおすすめしません。代わりにカスタムビューモデルを作成します。

+0

こんにちは、カスタムビューモデルを使用することができますが、IDが私のビューではまだ0に戻ってきているように私はまだ興味深いですが、私のビューにIDフィールドを入れて、まだdevのツールで正しい番号を示しています。 –

0

(それをテストしていない。両方または第二1が動作するはずのどちらか。しかし、あなたはModelを使用する必要がある)以下に

@Html.HiddenFor(m => m[i].Id) 

を変更してみてください

@Html.HiddenFor(@Model[i].Id) 

OR

@Html.HiddenFor(m => Model[i].Id) 
+0

申し訳ありませんが、それでもまだ動作しません。フォームがすでに正しいIDを送信しているので、自分のビューが問題ではないと思います。唯一の問題は、IDがコントローラに来たときに常に0を返します。 –

+0

どのデータが送信されますか? – TheUknown

+0

モデルをビューに渡していますか? '@model IList //詳細ビューの最初の行'? 'Item'モデルはどのように見えますか、モデルや他の関連コードを追加できますか? – TheUknown

関連する問題