【发布时间】:2011-12-10 06:31:09
【问题描述】:
场景:共有三个视图(Razor),分别命名为“InvoiceBill”、“Index”、“Create”。
- 创建视图包含用于输入发票数据的表单页面。
- 索引页面包含所有当前日期发票清单。
- InvoiceBill 包含基于此链接 (http://forums.asp.net/t/1711971.aspx/1) 生成 excel 文档(作为发票报告)的代码。
一旦我提交表单(创建视图),它就可以将表单数据发布到数据库(使用 EF)。插入数据后,返回Index页面。
但现在我需要在调用索引页面之前调用“InvoiceBill”视图。
[HttpPost]
public ActionResult Create(FormCollection collection, InvoiceViewModel INVViewModel)
{
if ((collection != null) && (this.ModelState.IsValid))
{
salesOrder.AccountNumber = INVViewModel.AccountNumber;
salesOrder.BillToAddressID = INVViewModel.BillToAddressID;
salesOrder.Comment = INVViewModel.Comment;
salesOrder.ContactID = INVViewModel.ContactID;
.
.
.
.
int sID = Using<CreateSalesOrder>().Execute(0, salesOrder);
***** From here i need to call the InvoiceBill page. Or guide me any other good way to achieve this
return RedirectToAction("Index");
}
}
现在我正在通过一些解决方法来实现这一点。但是我觉得这样不好。请指导我如何以正确的方式实现这一目标? 谢谢
编辑:
public ActionResult PrintInvoice(int id)
{
InvoiceReportViewModel invoiceReport = new InvoiceReportViewModel();
var soToView = Using<GetSalesOrders>().ExecuteForReport(id);
invoiceReport.InvoiceBillName = "Invoice" + id.ToString();
invoiceReport.CustomerName = soToView.Customer.Name;
invoiceReport.SalesOrderNumber = soToView.SalesOrderNumber;
.
.
.
.
return View(invoiceReport);
}
InvoiceReport.cshtml
@model eItemBox.Web.Models.InvoiceReportViewModel
@{
Layout = null;
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("Content-Disposition", "attachment; filename=" + Model.InvoiceBillName);
//Content-Disposition is defined in RFC-2183
}
<Worksheet ss:Name="MyInvoice">
.
.
.
</Workbook>
【问题讨论】:
-
您要返回多个视图还是不同的视图?
标签: c# asp.net asp.net-mvc-3