0

入力用の注文フォームを作成しようとしています。

ユーザーが複数の項目を追加して更新できるようにする必要があります。ショッピングカートクラスを使用しようとしていました (ユーザーがカートアイテムを作成してリストアイテムを追加すると、リストアイテムに複数の行を追加できます)。

私はそれをやり遂げませんでした。私はサイトを構築するためasp.net razorに使用 しています。webmatrixWebmatrix は Cart() を認識しないと言っています。

@{ 
if (Session["cart"] == null)
{
Session["cart"] = new Cart();
}
Cart cart = (Cart)Session["cart"];

}
<table id="cartTable">
<tr>
<th class="product">Product</th>
<th class="size">Size</th>
<th class="price">Price</th>
</tr>
@foreach (var item in cart.Items)
{
<tr>
<td class="product">@item.ProductID</td>
<td class="size">@item.Size</td>
<td class="price">£@item.Price</td>
</tr>
}
</table>

これを行うより良い方法はありますか?すべてのヘルプは大歓迎です

4

2 に答える 2

2

動的リスト要素をバインドする方法があります

@foreach (i=0; i< cart.Items.count; i++)
{
<tr>
   <td class="product"> <input type="hidden" name="cart.item[@i].ProductID"> </td>
   <td class="size"> <input type="text" name="cart.item[@i].Size"> </td>
   <td class="price">£ <input type="text" name="cart.item[@i].Price"> </td>
</tr>
}

Webmatrix is saying that it doesnt recognise Cart()

モデルを Models フォルダーに配置し、Models 名前空間の一部にすることを強くお勧めします。その後、それらは自動的に利用可能になります。それ以外の場合は、完全な参照パスでカートを参照する必要がある場合があります (モデル フォルダーにない場合)。例

Datalayer.Entities.Cart cart = (Datalayer.Entities.Cart)Session["cart"];

最後の注意: カートをモデルとしてビューに渡しているわけではありません

@model {Project}.Entities.Cart

これは、MVC 3 フレームワークを使用するより良い方法です。以前に参照の問題を発見しており、緊密にバインドされたヘルパーを使用するオプションがあります。

于 2013-02-22T17:47:30.380 に答える
1

MVC 開発には、WebMatrix よりも Visual Studio 2012 Express を使用することをお勧めします。さらに、ユーザーが同じページを介してその場で項目を追加できるようにする場合は、jQuery (javascript) を使用することもお勧めします。必要に応じて、例を共有できます。

もう 1 つ注意: これには、2 つの非常に異なるプラットフォームである MVC と WebForms の両方でタグ付けしました。

編集:

Dave Aのソリューションの方が優れていると思いますが、jQueryでこれを行うには:

div1フォームに追加ボタンと非表示を配置します

<form action="/MyController/MyAction" method="post" id="addListItemForm">
<button id="addListItemButton">Add List Item</button>
<div style="hidden">
<input type="text" name="product" id="product" />
<button id="addButton">Add</button>
</div>
<input type="submit" text="Submit" />
</form>

2 ボタンクリック時にフォームフィールドを表示する

$('#addListItemButton').click(function(){
  $('#addListItemForm div').show();
});

3 追加ボタンのクリック時に隠しフィールドを追加する

$('#addButton').click(function(){
  var product = $('#addListItemForm #product').val();
  $("input").attr({
            name : "productListItems[]", 
            type : "hidden",
            value : product
        }).after('#addListItemForm');
});

4 フォームが送信されると、productListItemsPOST メソッドを介して渡された配列にさまざまな製品名が含まれます。

注: これを少しいじる必要がありますが、良い学習練習になるでしょう... 何をしようとしているのか正確にはわかりませんが、これが私の最善の推測です。

于 2013-02-22T17:37:59.697 に答える