男性MVCチュートリアルの資料はオンラインで入手できます。 MVCでフォームを構築する方法を理解するために、それらのいくつかを読んでおくことを強くお勧めします。
ViewBag
を使用しないでください。クラスを定義すると、データを前後に転送するコンテナとしてViewModel
を定義できます。
namespace DL.SO.ProductChangeStock.Models.Product
{
public class ChangeProductStockViewModel
{
public int ProductId { get; set; }
public double Amount { get; set; }
}
}
利用HttpPost
の代わりHttpGet
。 HttpGet
を使用すると、入力値がURLに追加されている可能性があります。また、かみそりビューでフォームを構築するときに強く型付けされるように、RazorビューでChangeProductStockViewModel
を宣言する必要があります。
また、フォームの送信時に移動するプロパティの非表示入力を作成する必要があります。要求(フォームを送信したとき)を
@model DL.SO.ProductChangeStock.Models.Product.ChangeProductStockViewModel
@{
ViewBag.Title = "Change Product Stock";
}
<h2>Change Product Stock</h2>
@using(Html.BeginForm("changeStock", "product", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<!-- Use HTML helper to construct hidden input for the id -->
@Html.HiddenFor(m => m.ProductId)
<!-- As well as the amount text box -->
@Html.TextBoxFor(m => m.Amount)
<button type="submit">Submit</button>
}
次にHTTPGET(ページのロード時)に対応し、Product
コントローラ内の2つのアクションを作成し、HttpPost。
namespace DL.SO.ProductChangeStock.Controllers
{
public class ProductController : Controller
{
[HttpGet]
public ActionResult ChangeStock()
{
// Initialization of the view model
var vm = new ChangeProductStockViewModel
{
ProductId = 1,
Amount = 2.3
};
return View(vm);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ChangeStock(ChangeProductStockViewModel model)
{
if (ModelState.IsValid)
{
// Do your work
// If succeed, redirect to somewhere else
return RedirectToAction("index");
}
ModelState.AddModelError("", "Something went wrong when changing the product stock.");
// Redisplay the view
// You can always re-initialize the model data here too
return View(model);
}
}
}
URLにamtを取得できましたが、商品のIDにアクセスできませんでした。 –
URLにlocalhost:53459/Products/ChangeStock?id = 1&amt = -10と入力し、そこにChangeStockメソッドが働いていました。 URLと同じようにテキストボックスを動作させるのに役立つ必要があります。 -10を入力した場合と同じように、同じURLが生成されます。 –