4

我正在使用 MVC 4 技术创建 ASP.NET 应用程序,并且我希望允许最终用户在发票上输入行项目。我希望用户能够在发票中添加任意数量的行项目,然后当他们完成后能够单击表单上的保存按钮,然后将发票和所有行项目数据写入数据库。有人可以帮助指导我如何处理这个问题吗?

4

3 回答 3

2

这是我在其他几个想法失败后决定这样做的方式。这听起来可能很奇怪,但请多多包涵。我使用 MVC 索引视图作为基础。

在用户看到发票之前,我将一个新的发票添加到数据库中,这样我就有了一个发票 ID。然后我显示发票索引视图。但@foreach (var item in Model)我没有将表格显示为@foreach (var item in Model.LineItems). 现在它是空白的,但是在我添加一些 LineItsms 之后,我将显示一个 LineItems 列表——这正是发票的内容。

但我们也希望能够添加我们的发票索引视图。因此,在索引视图的顶部,在您可以编码的部分,创建一个新的 LineItem 并将其 LineItem.invoiceID 保存为 Model.ID。然后在显示 LineItems 表之前添加部分视图 - 创建 LineItem。

现在,您可以在页面上添加新的发票行列表。

以下是 LineItem 的索引视图中的一些代码:

@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>

这是它的样子(除了我的不是发票):

截屏

于 2015-03-19T13:50:32.060 回答
0

你想要这样的东西。但是对于您的情况,情况会复杂得多。使用 jquery 来简化您的工作。

$('#add_item').click(function() {
    $('#invoice_listing tbody')
        .append(
            "<tr><td>" + $('#item').val() + "</td>" +
            "<td>" + $('#amount').val() + "</td></tr>"
        )
});

在添加每个行项目时,[添加项目] 按钮将触发一个事件,以将行项目数据的 ajax 发布到 MVC 控制器。然后控制器将执行业务逻辑并将行项目数据存储到数据库中。一旦事务成功,控制器应该向客户端浏览器返回一个“成功”标志。使用 JSON 会有所帮助。您的 javascript 应该识别“成功”标志,并将该项目添加到项目列表中。

最后,用户将按下[保存]按钮,完成整个发票数据输入。然后,您应该将发票标记为成功输入。

尽量不要让用户在未保存的情况下继续添加订单项。当添加项目行后保存失败时,他们会生气。

于 2013-04-01T02:41:06.683 回答
-1

有一个弹出窗口,您的用户可以在其中搜索订单项并添加它们。选择后捕获ItemId并使用它来构建一行,可能是 atr或 a div。因此,对于每个包含行项目的行项目,您将拥有一个tr或,然后是一个或两个文本框。说一个文本框的数量和另一个价格。然后要么做一个 ajax 发布,你迭代所有的 div 并将该信息作为 json 数据并将其发布到你的控制器方法。或者格式化每个 div,您的绑定可以收集它们并在您进行回发时提交 - 通过您的提交按钮。那应该让你开始。divId

于 2013-04-01T02:12:08.587 回答