私はAsp.Net Core 2.0 MVCで簡単なショッピングカートアプリを作ろうとしています。私はAjaxingをやっていません。私はカートとCartItemを更新したい、下の2つのビューのいずれかのいずれかからモデルデータをビューのテーブルとは異なるテーブルに保存するにはどうすればよいですか?
public class Product
{
public int Id { get; set; }
public string Title { get; set; }
public string Info { get; set; }
public decimal Price { get; set; }
}
public class Cart
{
public int Id { get; set; }
public int CartItemId { get; set; }
public int CustomerId { get; set; } // not in use yet
}
public class CartItem
{
public int Id { get; set; }
public int ProductId { get; set; }
public int NumEach { get; set; } // not in use yet
}
、再び、私はカートに追加]ボタンをクリックしたビューにリダイレクトされます:私は三つのモデルを持っている
1)インデックスビュー:
@model IEnumerable<simpleShop.Models.Product>
<table class="table">
<thead>
<tr>
<th>@Html.DisplayNameFor(model => model.Title)</th>
<th>@Html.DisplayNameFor(model => model.Info)</th>
<th>@Html.DisplayNameFor(model => model.Price)</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
<a asp-action="Details" asp-route-id="@item.Id">
@Html.DisplayFor(modelItem => item.Title)
</a>
</td>
<td>@Html.DisplayFor(modelItem => item.Info)</td>
<td>@Html.DisplayFor(modelItem => item.Price)</td>
<td>
<form asp-action="AddToCart">
<button type="submit" value="@item.Id">Add to cart</button>
</form>
</td>
</tr>
}
</tbody>
</table>
2)詳細ビュー:
以下@model simpleShop.Models.Product
@{
ViewData["Title"] = Html.DisplayFor(model => model.Title);
}
<h2>@Html.DisplayFor(model => model.Title)</h2>
<h4>@Html.DisplayFor(model => model.Info)</h4>
<h1>@Html.DisplayFor(model => model.Price)</h1>
<form asp-action="AddToCart">
<input type="hidden" asp-for="Id" />
<p>
<input type="submit" value="Add to cart" />
</p>
</form>
<div>
<a asp-action="Index">Return to list</a>
</div>
私の障害のあるAddToCart-Metで現時点ではカートやカートテーブルにデータを保存するために何もしていません。どうすれば入手できますか?一つのことバインド(のための
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> AddToCart([Bind("Id")] Product product)
{
if (ModelState.IsValid)
{
_context.Add(product);
await _context.SaveChangesAsync();
if (product.Id > 0) // added to cart via the details-view
{
return RedirectToAction("Details", "Home", product.Id);
}
else // added to cart via the index-view
{
return RedirectToAction(nameof(Index));
}
}
return View(product);
}
現在、正確に何が起こっていますか?それはAddToCartアクションに入っていますか?あなたはデバッグで流れをチェックするためにそれを実行しましたか? – Aeseir
AddToCartアクションは実行されていますが、データを受信しません。しかし、今のように、CartテーブルとCartItemテーブルではなくProductテーブルに書き込むように設定されています。私がProductの代わりにCartItemと言うアクションメソッドを変更すると、NumEachに0、ProductIdに0がCartItemテーブルに保存され、IdなしでHome/Detailsにリダイレクトされるので、404が発生します。私がそれを変更した場合、product.Id(またはcartItem.ID、それは問題ではありません)が> 0であれば、Home/Details + Idにリダイレクトされます。 – Stian