繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM