[英]Post html table to controller from view in MVC
这样做的全部意思是我试图从视图中获取一张表,并使用EPPlus从中创建一个Excelsheet。 我的视图中有一个表格,我们在其中使用html助手来显示模型中的值。 完全创建表格后,我想在单击按钮时将其发送到我的控制器。 当表格位于控制器中时,我需要访问表格值,以便从那里创建我的Excelsheet。
我现在遇到的最大问题是我无法成功将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; }
}
您无需将模型数据发送到视图,然后再发送回控制器。 相反,您需要将模型数据直接发送到Excel。 您可能会认为Excel是视图。
有很多与此相关的资源。 这是我通过搜索“将mvc导出到excel c#”发现的
使用ASP.NET MVC 4 C#将数据导出到Excel文件正在呈现到视图中
使用上面线程中的示例,有一种方法-public ActionResult ExportToExcel()
您可以创建一个按钮(实际上是一个链接),该按钮将调用此方法。 因此,链接将是例如...
<a href="yourcontrollername/ExportToExcel">export to excel</a>
编辑-我刚刚注意到您的ajax调用...这就是您要调用该方法的地方,所以...
$(document).on('click', '#saveIcon', function () {
将会
$('#mylinkid').click(function () {
我认为最好的方法是单击按钮时重新运行查询。 是否可以使用某种标识符来运行相同的查询?
我的建议是将某种ID传递给控制器中的操作方法。 然后,您重新运行查询以获取相同的数据(或更多最新数据)。 您可以使用它来填充电子表格。
如果绝对必要,可以将整个模型从视图发布到控制器,但这似乎没有必要。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.