Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MVC中将数据表模型传递给控制器操作_C#_Jquery_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

C# 在MVC中将数据表模型传递给控制器操作

C# 在MVC中将数据表模型传递给控制器操作,c#,jquery,asp.net-mvc,asp.net-mvc-3,C#,Jquery,Asp.net Mvc,Asp.net Mvc 3,代码: @model System.Data.DataTable 下载 [HttpPost] 公共无效getCSV(数据表dt) { MemoryStream stream=Export.GetCSV(dt); var filename=“exampleCVSV.csv”; var contenttype=“text/csv”; Response.Clear(); Response.ContentType=ContentType; Response.AddHeader(“内容处置”、“附件;文件

代码:

@model System.Data.DataTable
下载
[HttpPost]
公共无效getCSV(数据表dt)
{
MemoryStream stream=Export.GetCSV(dt);
var filename=“exampleCVSV.csv”;
var contenttype=“text/csv”;
Response.Clear();
Response.ContentType=ContentType;
Response.AddHeader(“内容处置”、“附件;文件名=“+filename”);
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.BinaryWrite(stream.ToArray());
Response.End();
}
我想允许用户在单击按钮时导出CSV文件。datatable应该传递给getCSV方法。有人能帮我吗。谢谢

我不介意使用Tempdata存储datatable,然后在所需的控制器中访问它

比如:

@model System.Data.DataTable

<button type="submit" class="btn btn-primary"  data-dismiss="modal" aria-hidden="true"> Download</button>



[HttpPost]
public void getCSV(DataTable dt)
{
   MemoryStream stream = Export.GetCSV(dt);

   var filename = "ExampleCSV.csv";
   var contenttype = "text/csv";
   Response.Clear();
   Response.ContentType = contenttype;
   Response.AddHeader("content-disposition", "attachment;filename=" + filename);
   Response.Cache.SetCacheability(HttpCacheability.NoCache);
   Response.BinaryWrite(stream.ToArray());
   Response.End();
}

希望这有帮助

与其传递
数据表
,我建议您使用与创建初始模型相同的方法重新创建它,因为每次创建视图时,数据表都是不同的。确定,另一个选项:为模型创建数据表时,您可以将它存储在会话中,并在getCSV方法中重用它。如果您坚持通过post传递它,那么您需要有一个包含表示数据库的字段的表单,然后根据这些值构建它-这可能会很痛苦,这取决于您的表有多复杂以及使用会话的其他替代方案?我不介意通过post使用不同的方法。不介意,你必须把它存储在内存中的某个地方。无论是在客户端内存中并在post中传回,还是在存储在会话中的服务器内存中(或会话的等效内存)。但是,如果您需要大量的数据,并且有许多不同的用户同时使用,那么存储服务器端可能不太好
[HttpPost]
public FileStreamResult GetCSV(someType param)
{
   var dt = MyGetDt(param);
   MemoryStream stream = Export.GetCSV(dt);

   var filename = "ExampleCSV.csv";
   var contenttype = "text/csv";
   return new FileStreamResult(stream, contenttype)
   {FileDownloadName = filename};
}