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 数据执行任何操作的主要内容,如果未能解决你的问题,请参考以下文章