2017-01-03 6 views
0

私は、 '数量'という名前のHtml.TextBoxの列を追加して、デフォルトのインデックスビューにフォームを追加しました。 Submitを押すと、アクション「OrderForm」に送信されますが、デバッグ時には数量値とitemNameinventory_noがnullになります。誰も助けることができますか?以下はASP.MVC - フォームを使用することにより、どのようにパラメータをコントローラに渡すのですか?

enter image description here

私のMVCからのサンプルコードです:

モデル:

[Table("inventory")] 
public partial class inventory 
{ 
    [Key] 
    [Column(Order = 0)] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int inventory_no { get; set; } 

    public string name { get; set; } 
}  

ビュー:

@model IEnumerable<MYAPP.inventory> 
@{ 
ViewBag.Title = "Index"; 
} 
@using (Html.BeginForm("orderForm", "inventories", FormMethod.Post)) 
{ 
<h2>Index</h2> 
<p> 
@Html.ActionLink("Create New", "Create") 
</p> 

<div id="details"></div> 
<table class="table"> 
<tr> 
    <th> 
     Quantity 
    </th> 
    <th> 
     Name 
    </th> 
</tr> 

@foreach (var item in Model) 
{ 
    <tr> 
     <td> 
      @Html.TextBox("Quantity",0, new { style = "width:30px",  
@class = "selectedItem"}) 
     </td> 
     <td class="itemName"><b> 
@Html.DisplayFor(modemItem => item.name) 
</b> 
     </td> 
     <td> 
      <a href="#" class="remove" data-url="@Url.Action("Remove", new { id = item.inventory_no })">Remove</a> 
      @Html.ActionLink("Edit", "Edit", new { inventory_no = item.inventory_no.ToString(), client_no = item.client_no }) | 
      @Html.ActionLink("Delete", "Delete", new { inventory_no = item.inventory_no.ToString(), client_no = item.client_no }) 
     </td> 
    </tr> 
} 
</table> 
<input type="submit" value="Submit your order" /> 
} 

はコントローラー:

public ViewResult orderForm (int quantity, string itemName, int? inventory_no) 
    { 

     return View(); 
    } 
+0

1つのフィールドにはテキストボックスしかありませんか? – AliK

+0

https://puu.sh/t9dNL/3fb3950293.png – TaylorM

答えて

1

現在のコードでは数量のみのマークアップが生成されています。 inventory_idと名前の値が必要な場合は、そのためのフォームフィールドが必要です。

アクションメソッドのパラメータに一致する名前を使用して、これらの値を非表示フィールドに保持できます。また、アクションメソッドは1つの在庫アイテムの詳細を取りますので、ループ内の各アイテムにフォームと送信ボタンを用意してください。

@foreach (var item in Model) 
{ 
    using(Html.BeginFor("orderForm","YourcontrollerName")) 
    { 
    <tr> 
     <td> 
      @Html.TextBox("Quantity",0, new { @class = "selectedItem"}) 
     </td> 
     <td class="itemName"> @Html.DisplayFor(modemItem => item.name) 
           @Html.Hidden("name",item.name) 
           @Html.Hidden("inventory_no",item.inventory_no) 

     </td> 
     <td> 
      <input type="submit" value="Submit your order" /> 
      <!-- your existing links here--> 
     </td> 
    </tr> 
    } 
} 
+0

私はASP.NET MVCを初めて使い慣れました。私はHiddenFor HTMLヘルパーについて知らなかった。 – TaylorM

+0

「隠し」ヘルパーを使用します(回答を更新しました)。基本的にフォームに隠し要素のマークアップを生成します(フォームには値が入ります)。 – Shyju

関連する問題