这个的全部含义是我试图从我的视图中取一个表并使用EPPlus从中创建一个Excel表。我在我的视图中有一个表格,我使用html帮助程序来显示模型中的值。当表格完全创建时,我想在点击按钮时将其发送到我的控制器。当表在我的控制器中时,我需要访问表值,这样我就可以创建我的Excel表。
我现在面临的一个大问题是我无法成功将我的html表发送给我的控制器。当我在控制器中使用它时,如何访问这些值?如果可能(我猜不是),将表作为DataTable发送到控制器会很棒。到目前为止,我已尝试使用ajax,但如果还有其他任何方式我也可以使用它
我的观点:
@model IEnumerable<CalcFactory.Models.Calculation>
<table cellspacing="0" width="80%" id"detailTable">
@{var rowID = 0;}
@{var cellID = 1;}
@foreach (var item in Model)
{
<tr id="@rowID">
<td align="center">
@rowID
</td>
<td align="center" id="A-@cellID">
@Html.DisplayFor(modelItem => item.PeriodStartDate)
- @Html.DisplayFor(modelitem => item.PeriodEndDate)
</td>
<td align="center" id="B-@cellID">
@Html.DisplayFor(modelItem => item.InvoiceAmount)
</td>
<td align="center" id="C-@cellID">
@Html.DisplayFor(modelItem => item.InterestRate)
</td>
<td align="center" id="D-@cellID">
@Html.DisplayFor(modelItem => item.InterestAmount)
</td>
<td align="center" id="E-@cellID">
@Html.DisplayFor(modelItem => item.Amortization)
</td>
<td align="center" id="F-@cellID">
@Html.DisplayFor(modelItem => item.PresentValue)
</td>
</tr>
rowID++;
cellID++;
}
</table>
我的控制器:
public class SaveController : Controller
{
public ActionResult SaveExcel(DateTable dt)
{
//Work with table values here. How?
}
}
我的JS:
$(document).on('click', '#saveIcon', function () {
var data = $('#detailTable').html();
var url = "/Save/SaveExcel";
$.ajax({
type: 'POST',
url: url,
data: data,
datatype: DataTable
)}
});
我的模特:
public partial class Calculation
{
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}")]
public DateTime PeriodStartDate { get; set; }
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}")]
public DateTime PeriodEndDate { get; set; }
[DisplayFormat(DataFormatString = "{0:.00}")]
public decimal InvoiceAmount { get; set; }
[DisplayFormat(DataFormatString = "{0:P6}")]
public decimal InterestRate { get; set; }
[DisplayFormat(DataFormatString = "{0:.00}")]
public decimal InterestAmount { get; set; }
[DisplayFormat(DataFormatString = "{0:.00}")]
public decimal Amortization { get; set; }
[DisplayFormat(DataFormatString = "{0:.00}")]
public decimal PresentValue { get; set; }
[DisplayFormat(DataFormatString = "{0:.00}")]
public decimal StartValue { get; set; }
public int NumberOfDays { get; set; }
}
答案 0 :(得分:0)
您不需要将模型数据发送到视图,然后再返回控制器。您需要将模型数据直接发送到Excel。您可能会将Excel视为视图。
有很多与此相关的资源。这是我通过搜索&#34; mvc导出到excel c#&#34;
找到的。Export data to Excel file with ASP.NET MVC 4 C# is rendering into view
使用上面的主题中的示例,有一个方法 - 公共ActionResult ExportToExcel()
您可以创建一个按钮(确实是一个链接),它将调用此方法。所以链接就是......例如......
<a href="yourcontrollername/ExportToExcel">export to excel</a>
编辑 - 我刚刚注意到你的ajax电话......你可以调用这个方法,所以...
$(document).on('click', '#saveIcon', function () {
将是
$('#mylinkid').click(function () {
答案 1 :(得分:0)
我认为您最好的办法是在单击按钮时重新运行查询。是否有某种标识符可用于运行相同的查询?
我的建议是将某种id传递给控制器中的action方法。然后重新运行查询以获取相同的数据(或更多的最新数据)。您可以使用它来填充电子表格。
如果您必须,可以将整个模型从视图发布到控制器,但这似乎没有必要。