MVC操作没有对CSV数据做任何事情

时间:2013-09-17 00:43:25

标签: jquery asp.net-mvc asp.net-mvc-4 csv

我有一些JavaScript连接CSV字符串。然后将此字符串传递给MVC操作,该操作应打开一个文件对话框,要求用户选择他们想要打开CSV文件的程序类型。

最初,我只是使用vb StringBuilder来连接字符串,但我现在需要使用js。出于某种原因,我无法获得与之前相同的对话,但我的MVC操作并没有改变。这是我的JavScript,它处理串联并将字符串提交给mvc操作:

<script type="text/javascript">
    $(document).ready(function () {
        $("#csv-export").click(function () {
            var csvStr = "";
            $("#myTable tbody tr:visible").each(function () { //for each visible row
                $(this).children("td").each(function () { //for each rows tds
                    if (!$(this).has("a").length) { //if the td does not contain a link
                        csvStr += $(this).html() + ", "; //Append the td's html
                    }
                });
                csvStr = csvStr.substring(0, csvStr.length - 2);
                csvStr += "\n";
            });
            $.get('@Url.Action("CSVExport")', { csv: csvStr }, function (ReturnedData) {alert("Success!")});
        });
    });
</script>

我正确地收到了“成功!”回来时提醒。

这是我的MVC操作,正确接收字符串,如“field1,field2,field3 \ n field1,field2,field3”,注意每组字段之间的换行符:

Public Function CSVExport(ByVal csv As String) As FileContentResult
    If csv Is Nothing Then csv = "Sorry! There was an error creating this CSV file."
    Return File(New System.Text.UTF8Encoding().GetBytes(csv), "text/csv", "Report123.csv")
End Function

但是,唉,没有文件对话框出现。这是我的JavaScript / Action Return的问题吗?

1 个答案:

答案 0 :(得分:0)

是的,所以看起来更多的研究,JavaScript不能用来直接打开这样的文件。我确实通过使用隐藏字段找到了解决方法。

我将按钮包裹在一个提交我想要的动作的表单中。然后我改变了我的JavaScript来改变隐藏字段的值。这样,JavaScript仍然可以用于访问我的所有可见表行并连接字符串。但是MVC在提交表单之前接管,仍然可以正确显示文件打开对话框。

下面的代码显然要求您的视图是强类型的,并且具有表示csv字符串的属性。此处,此属性为model.csvData

形式:

@Using Html.BeginForm("CSVExportAll", "Project")
    @<div>
        @Html.HiddenFor(Function(model) model.csvData, new With {.id = "csv-holder"})
        <input type="submit" value="CSV Export" id="csv-export" />
    </div>
End Using


的JavaScript:

除了一行之外,JavaScript是相同的。之前的$.get行替换为:

$("#csv-holder").val(csvStr);