To return a downloadable file in a controller action, you have to send a file header in controller like that:
$fileName = 'mm_actioncodes_export_'.date("Ymd_His").'.csv';
$fp = fopen(Mage::getBaseDir('var') . DS .'export' . DS . $fileName, 'w');
fputcsv($fp, $codes, ';', '"');
fclose($fp);
$this->_prepareDownloadResponse($fileName, array(
'type' => 'filename',
'value' => Mage::getBaseDir('var') . DS .'export' . DS . $fileName,
//'rm' => true // can delete file after use
));
return $this;
