使用ASP.NET MVC添加发票行

使用ASP.NET MVC添加发票行,asp.net,asp.net-mvc,c#-4.0,asp.net-mvc-4,visual-studio-2012,Asp.net,Asp.net Mvc,C# 4.0,Asp.net Mvc 4,Visual Studio 2012,我正在使用MVC4技术创建ASP.NET应用程序,我希望允许最终用户在发票上输入行项目。我希望用户能够将任意多的行项目添加到发票中,然后在完成后单击表单上的“保存”按钮,然后将发票和所有行项目数据写入数据库。有人能帮我解决这个问题吗?有一个弹出窗口,用户可以在其中搜索行项目并添加它们。选中时,捕获ItemId并使用它生成一行,可能是tr或div。因此,对于包含行项目的Id的每个行项目,您将有一个tr或div,然后是一个或两个文本框。用一个文本框表示数量,另一个文本框表示价格。然后,或者执行一个a

我正在使用MVC4技术创建ASP.NET应用程序,我希望允许最终用户在发票上输入行项目。我希望用户能够将任意多的行项目添加到发票中,然后在完成后单击表单上的“保存”按钮,然后将发票和所有行项目数据写入数据库。有人能帮我解决这个问题吗?

有一个弹出窗口,用户可以在其中搜索行项目并添加它们。选中时,捕获
ItemId
并使用它生成一行,可能是
tr
div
。因此,对于包含行项目的
Id
的每个行项目,您将有一个
tr
div
,然后是一个或两个文本框。用一个文本框表示数量,另一个文本框表示价格。然后,或者执行一个ajax post,迭代所有div,将该信息作为json数据,并将其发布到控制器方法。或者格式化每个div,绑定可以在其中收集它们,并在回发时通过提交按钮提交。这应该让你开始了。

你想要类似的东西。但你的情况会复杂得多。使用jquery简化您的工作

$('#add_item').click(function() {
    $('#invoice_listing tbody')
        .append(
            "<tr><td>" + $('#item').val() + "</td>" +
            "<td>" + $('#amount').val() + "</td></tr>"
        )
});
$('#添加项')。单击(函数(){
$(“#发票_清单主体”)
.附加(
“”+$(“#项”).val()+“”+
“”+$(“#金额”).val()+“”
)
});
在添加的每个行项目上,[Add item]按钮将触发一个事件,以向MVC控制器发送行项目数据的ajax post。然后,控制器将执行业务逻辑并将行项目数据存储到数据库中。一旦事务成功,控制器应向客户端浏览器返回“成功”标志。使用JSON将有所帮助。javascript应该识别“success”标志,并将项目添加到项目列表中

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


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

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

在用户看到发票之前,我将新发票添加到数据库中,以便获得发票ID。然后显示发票索引视图。但是没有显示
@foreach(模型中的var项)
的表格,我将其更改为
@foreach(模型中的var项)
。现在它是空的,但在我添加一些行ITSM之后,我将显示一个行项目列表-这正是发票的含义

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

现在,在页面上有一个发票行列表,您可以在其中添加新的发票行

以下是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>
@model MyAppName.Models.Invoice
@{
ViewBag.Title=“Index”;
MyAppName.Models.LineItem line=新建LineItem();
line.invoiceID=Model.ID;
}
发票联
@Html.Partial(“创建”,行)
@Html.DisplayName(“金额”)
@Html.DisplayName(“说明”)
@foreach(Model.LineItems中的变量项)
{
@DisplayFor(modelItem=>item.Amount)

@Html.DisplayFor(modelItem=>item.Description
@ActionLink(“删除”,“删除确认”,新的{id=item.invoiceID})
}
全部的
R@Model.LineItems.Sum(金额=>amt.Amount)
下面是它的样子(除了我的不是发票):

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