こんにちは、エンティティフレームワークを使用して製品を更新する際に問題が発生しました。 開発者のツールからフォームを送信すると、フォームが[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を与えます。
そのフィールドを除いて他のすべてが機能している場合、Idにはセッターがないと感じています。あなたは 'Id'プロパティまたは単にゲッタにセッターを持っていますか? –
'詳細'ビューコードを追加できますか?私はあなたが 'ID'ビューで定義されていないと思います – TheUknown
@ Nava-Prev.Quetiこんにちは、Idプロパティはgetterとsetterを持っています。 –