C# 在MVC中从视图将html表发布到控制器

C# 在MVC中从视图将html表发布到控制器,c#,jquery,ajax,asp.net-mvc,C#,Jquery,Ajax,Asp.net Mvc,其全部含义是,我试图从我的视图中获取一个表,并使用EPPlus从中创建一个Excelsheet。我的视图中有一个表,我使用html助手显示模型中的值。当表格完全创建后,我想在单击按钮时将其发送给我的控制器。当表格在我的控制器中时,我需要访问表格值,以便从那里创建我的Excel工作表 我现在面临的最大问题是无法成功地将html表发送到控制器。当我的控制器中有它时,我如何访问这些值?如果可能的话(我想不是),最好将该表作为DataTable发送给控制器。到目前为止,我已经尝试过使用ajax,但我不知

其全部含义是,我试图从我的视图中获取一个表,并使用EPPlus从中创建一个Excelsheet。我的视图中有一个表,我使用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>
我的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#”找到的一个

使用上面线程中的示例,有一个方法-public ActionResult ExportToExcel()

您可以创建一个按钮(实际上是一个链接),它将调用此方法。比如说,这个链接是

<a href="yourcontrollername/ExportToExcel">export to excel</a>
会是

$('#mylinkid').click(function () {

我认为最好的办法是在单击按钮时重新运行查询。是否有某种标识符可用于运行同一查询

我的建议是将某种id传递给控制器中的操作方法。然后重新运行查询以获取相同的数据(或更多最新数据)。您可以使用它来填充电子表格


如果必须,您可以将整个模型从视图发布到控制器,但这似乎不是必需的。

您需要将模型传递到控制器方法,而不是数据表。此外,您需要先序列化表单,而不是发布表单的HTMLY。如果您不能使用jQuery中的
DataTable
类型,大多数人会使用表单编码或JSON提交该表。然后从服务器上,您可以将JSON绑定/反序列化到一个模型或类似的东西?我是个新手…@mituw16我真的不知道你的意思。如何将我的整个模型从视图发送到控制器?我建议您使用.net研究MVC并从那里开始。这是一个非常基本的问题。但我只想在点击按钮时创建它?因此,这是用户的选择权-按钮将调用创建excel的例程。我将在我的原始答案中添加一些细节。该模型用于创建年金计算,它们可以彼此不同。在我的头脑中(并不意味着它是正确的),我需要得到第一个或整个模型(因为第二个模型取决于第一个,依此类推),但是你不能在控制器中重新运行计算吗?无论您使用什么方法在视图中生成表,都应该能够为电子表格生成数据,不是吗?您永远不会希望将html从表传递到控制器。最多你会想把模型传给控制器,但在这种情况下,我也不认为那是必要的。此外,您通常不需要“SaveController”。也许更像年金控制器?它应该在一个类似于你的视图的文件夹结构中。我有一个用于计算的年金控制器。我将尝试你的方法,它似乎有效(再一次,在我的脑海中)
$(document).on('click', '#saveIcon', function () {
$('#mylinkid').click(function () {