将模型从视图传递回控制器以导出为CSV

时间:2013-12-09 16:47:04

标签: c# jquery asp.net-mvc csv razor

我正在尝试制作可下载的CSV。我遇到的问题是我不确定如何将视图中的数据正确传递回控制器。

我在CSV中想要的所有数据都在@ Model.Table中。问题是我不确定如何将数据正确地传回我的控制器。请注意我在下面的js中尝试使用csvData = @ Model.Table.ToCsv()。这可怕的失败所以我不确定如何正确地做到这一点。

<div class="btn btn-default pull-right" id="dispoCSV">
    <i class="icon-file-alt"></i>
    Disposition Report</div>
<script>
    $("#dispoCSV").click(function () {
        var csvData = @Model.Table.ToCsv();
        $.post("Respondent/DownloadCSV", function (data) {
            csvData
            })
        });
</script>

当我通过这个障碍时,我想我可以轻松地确定如何使我的DownloadCSV方法将其转换为csv。

2 个答案:

答案 0 :(得分:1)

我认为您不需要从视图转换为CSV。你的控制器可以这样做。我会这样试试:

型号:

public class YourModel {
    public YourDataType Table { get; set; }
}

查看:

@model YourModel

@using (Html.BeginForm("Submit", "YourController", FormMethod.Post)) {
    // Put your model properties in the form so that they get passed to the controller on form submit;
    // use @Html.HiddenFor if you want to hide them from being displayed.
    // Since your table property has nested properties, you probably need a custom editor template for this.
}

控制器:

public class YourController : Controller {

    // Include an action here to display your view

    [HttpPost]
    public ActionResult Submit(YourModel model) {
        var csvData = model.Table.ToCsv(); // assuming you have this method already since it's in your code above
        // Do something with the data and return a view
    }
}

答案 1 :(得分:0)

您应该传递可用于生成数据的过滤条件,而不是传回整个数据。在您的Action方法中,阅读此条件并生成数据并将其以CSV格式发送回UI。