从MVC中的视图将html表发布到控制器

时间:2014-03-31 12:32:33

标签: c# jquery ajax asp.net-mvc

这个的全部含义是我试图从我的视图中取一个表并使用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; }
}

2 个答案:

答案 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方法。然后重新运行查询以获取相同的数据(或更多的最新数据)。您可以使用它来填充电子表格。

如果您必须,可以将整个模型从视图发布到控制器,但这似乎没有必要。