0

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

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

<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 的问题吗?

4

1 回答 1

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);
于 2013-09-18T20:42:12.453 回答