2016-09-26 6 views
0

Я хотел бы создать ссылку на моем сайте, которая после щелчка откроет окно загрузки (просто какой-то простой текстовый файл). В ряде учебников я нашел способ сделать это, однако, по какой-то причине, кажется, что ActionLink оленья кожа называют мой метод и ищет зрения вместоMVC - ActionLink ищет представление вместо вызова метода контроллера

My ActionLink

@Html.ActionLink("here is the gpx log", "Download", "Treks") 

Мой метод загрузки в контроллер Treks (добавлена ​​также следующий метод, используя атрибут маршрутизации в случае, если в случае беспорядка)

public FileResult Download() 
{ 
    byte[] fileBytes = System.IO.File.ReadAllBytes(@"~/Files/file.txt"); 
    string fileName = "file.txt"; //I will add parameters later, once the basics work 
    return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName); 
} 


[Route("treks/{trekname}")] //Route: /Users/12 
public ActionResult ShowTrek(string trekname) 
{ 
    return View(trekname); 
} 

И это ошибка, я всегда получаю

Вид «Загрузить» или его мастер не найден, или механизм просмотра не поддерживает найденные местоположения. Следующие места были найдены ..

~/Views/Treks/DownloadFiles.aspx blahblahbla:

я провел один час работы над этим и еще не один дюйм ближе к решению. Кто-нибудь знает, где я совершаю ошибку? Большое спасибо

Update: Это содержание моего RouteConfig файла

public static void RegisterRoutes(RouteCollection routes) 
     { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     routes.MapMvcAttributeRoutes(); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 

Edit: Хорошо, я отлажена его. Кажется, проблема заключается в маршрутизации атрибутов. По какой-то причине контроллер проигнорировал метод «Загрузить» и напрямую переходит к ActionResult ShowTrek ... любая идея, как его исправить?

+0

Я просто создаю простое приложение MVC, делаю что-то вроде вас, и он отлично работает (можно перенаправить на Загрузка и отклик на файл). Попробуйте проверить конфигурацию маршрутизации. – Brian

+0

Привет, я не помню, как удалял некоторые вещи из моей конфигурации маршрутизации, только изменение, которое я сделал, заключалось в том, что я включил маршрутизацию атрибутов (я использую маршрутизацию атрибутов в контроллере, но только после метода загрузки). Я добавил содержимое моего файла RouteConfig в вопрос. – Jozef

+0

Ваш метод ShowTrek выкинул бы исключение, потому что он пытался найти представление с именем, равным параметру 'trekname' (который я предполагаю« Download »). Вам нужно использовать 'return View ((object) trekname);' или лучше вернуть модель с свойством для 'trekname' –

ответ

0

решенный. Проблема заключалась в маршрутизации атрибутов. Pls см. Ответ Stephen Muecke в комментариях

0

Попробуйте заменить Fileresult с FileStreamResult вам может понадобиться создать объект FileStream внутри метода

new FileStream(fileName, FileMode.Open) 

public FileStreamResult Download() 
{ 
// Your code 

}