MVC 操作不对 CSV 数据执行任何操作

Posted

技术标签:

【中文标题】MVC 操作不对 CSV 数据执行任何操作【英文标题】:MVC action not doing anything with CSV data 【发布时间】:2013-09-17 00:43:24 【问题描述】:

我有一些连接 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 的问题吗?

【问题讨论】:

看这个:***.com/questions/4545311/… 【参考方案1】:

是的,所以经过更多研究,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);

【讨论】:

以上是关于MVC 操作不对 CSV 数据执行任何操作的主要内容,如果未能解决你的问题,请参考以下文章

添加检查 CSV 中是不是已存在 ExternalEmailAddress 以及它是不是不执行任何操作

处理对 ASP.NET MVC 操作的 CORS 预检请求

python读取csv文件并添加索引

MVC过滤器:自定义操作过滤器

使用 NodeJS 解析 CSV 文件

对于目录中的某些文件执行操作