2017-10-05 7 views
0

何らかの理由でamtがnullです。私は、Product ControllerからChangeStockメソッドを呼び出しています。何らかの理由で、amtがnullであると言っています。私はViewBagをコントローラメソッドChangeStockで使用してViewBagを格納しました。 ViewBag.whatToChange = amt;ASP.NETを使用している製品のQuantityOnHandを増やすことができません

製品クラスのインデックスに:プロダクトコントローラー、私は次のように使用ChangeStock方法で

つまり

@using (Html.BeginForm("ChangeStock", "Products", FormMethod.Get)) 
      { 
       <p> 
        Chnage By: @Html.TextBox("amt", ViewBag.whatToChange as string) 
        <input type="submit" value="amt" /> 
       </p> 
      } 

、私は、コントローラのを呼び出すためにテキストボックスを使用してトラブルを持っています関数。 ChangeStockは製品idとamtをパラメータとして取ります。

何らかの理由で、なぜボタンをクリックしたときに、Products ControllerのChangeStockメソッドを呼び出せないのかわかりません。

+0

URLにamtを取得できましたが、商品のIDにアクセスできませんでした。 –

+0

URLにlocalhost:53459/Products/ChangeStock?id = 1&amt = -10と入力し、そこにChangeStockメソッドが働いていました。 URLと同じようにテキストボックスを動作させるのに役立つ必要があります。 -10を入力した場合と同じように、同じURLが生成されます。 –

答えて

0

男性MVCチュートリアルの資料はオンラインで入手できます。 MVCでフォームを構築する方法を理解するために、それらのいくつかを読んでおくことを強くお勧めします。

ViewBagを使用しないでください。クラスを定義すると、データを前後に転送するコンテナとしてViewModelを定義できます。

namespace DL.SO.ProductChangeStock.Models.Product 
{ 
    public class ChangeProductStockViewModel 
    { 
     public int ProductId { get; set; } 
     public double Amount { get; set; } 
    } 
} 

利用HttpPostの代わりHttpGetHttpGetを使用すると、入力値が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); 
     } 
    } 
} 
関連する問題