MVC 4 テクノロジを使用して ASP.NET アプリケーションを作成しています。エンド ユーザーが明細項目を請求書に入力できるようにしたいと考えています。ユーザーが請求書に必要な数の明細項目を追加できるようにして、終了したらフォームの [保存] ボタンをクリックして、請求書とすべての明細項目データを書き込むことができるようにしたいと考えています。データベース。誰かがこれを処理する方法を教えてくれますか?
3 に答える
これは、他のいくつかのアイデアが失敗した後、私がそれを行うことにした方法です. 奇妙に聞こえるかもしれませんが、ご容赦ください。MVC Index View をベースとして使用しました。
ユーザーが請求書を見る前に、新しい請求書をデータベースに追加して、請求書 ID を取得します。次に、Invoice Index View を表示します。しかし、表を示す代わりに、@foreach (var item in Model)
に変更しました@foreach (var item in Model.LineItems)
。今は空白ですが、いくつかの LineItsms を追加すると、LineItems のリストが表示されます。これがまさに請求書です。
しかし、Invoice Index View も追加できるようにしたいと考えています。したがって、Index View の上部にあるコーディング可能な部分で、新しい LineItem を作成し、その LineItem.invoiceID を Model.ID として保存します。次に、LineItem のテーブルを表示する前に、部分ビュー - Create LineItem を追加します。
これで、新しいものを追加できるページに請求明細行のリストが表示されました。
LineItem の Index View のコードを次に示します。
@model MyAppName.Models.Invoice
@{
ViewBag.Title = "Index";
MyAppName.Models.LineItem line = new LineItem();
line.invoiceID = Model.ID;
}
<h2>Invoice</h2>
@Html.Partial("Create", line)
<table>
<tr>
<th>
@Html.DisplayName("Amount")
</th>
<th>
@Html.DisplayName("Description")
</th>
<th></th>
</tr>
@foreach (var item in Model.LineItems)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Amount)
</td>
@Html.DisplayFor(modelItem => item.Description
</td>
<td>
@Html.ActionLink("Delete", "DeleteConfirmed", new { id = item.invoiceID })
</td>
</tr>
}
<tr>
<th>Total</th>
<th>R @Model.LineItems.Sum(amt => amt.Amount)</th>
<th></th>
<th></th>
</tr>
</table>
そして、これがどのように見えるかです(私のものは請求書ではなかったことを除いて):
あなたはこのようなものが欲しい。しかし、あなたの場合はもっと複雑になります。jquery を使用して作業を簡素化します。
$('#add_item').click(function() {
$('#invoice_listing tbody')
.append(
"<tr><td>" + $('#item').val() + "</td>" +
"<td>" + $('#amount').val() + "</td></tr>"
)
});
項目が追加されるたびに、[項目の追加] ボタンがイベントを発生させ、項目データの ajax ポストを MVC コントローラーに実行します。その後、コントローラーはビジネス ロジックを実行し、項目データをデータベースに保存します。トランザクションが成功すると、コントローラーは「成功」フラグをクライアント ブラウザーに返す必要があります。そのためにJSONを使用すると役立ちます。JavaScript が「成功」フラグを認識し、商品リストに商品を追加する必要があります。
最後に、[保存] ボタンを押すと、請求書データの入力が完了します。次に、請求書を正常に入力されたものとしてマークする必要があります。
ユーザーが保存せずに項目を追加し続けないようにしてください。アイテムの行を追加した後、保存に失敗すると怒られます。