MVC - ActionLink 查找视图而不是调用控制器方法
MVC - ActionLink looks for a view instead of calling of controller method
我想在我的网站上创建 link,单击后将打开下载 window(只是一些简单的文本文件)。在几个教程中我找到了一种方法来做到这一点,但是,由于某种原因,似乎 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);
}
这是我经常遇到的错误
The view 'Download' or its master was not found or no view engine supports the searched locations. The following locations were searched..
~/Views/Treks/DownloadFiles.aspx blahblahbla:
我花了一个小时来解决这个问题,但离解决方案还差一步。有人知道我在哪里犯了错误吗?非常感谢
更新:这是我的 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 }
);
}
编辑:好的,我调试了它。似乎问题出在属性路由中。出于某种原因,控制器忽略了 Download 方法并直接进入 ActionResult ShowTrek...知道如何解决它吗?
尝试将 Fileresult
替换为 FileStreamResult
您可能还需要在方法中创建文件流对象
new FileStream(fileName, FileMode.Open)
public FileStreamResult Download()
{
// Your code
}
已解决。问题出在属性路由中。请在评论中查看 Stephen Muecke 的回答
我想在我的网站上创建 link,单击后将打开下载 window(只是一些简单的文本文件)。在几个教程中我找到了一种方法来做到这一点,但是,由于某种原因,似乎 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);
}
这是我经常遇到的错误
The view 'Download' or its master was not found or no view engine supports the searched locations. The following locations were searched..
~/Views/Treks/DownloadFiles.aspx blahblahbla:
我花了一个小时来解决这个问题,但离解决方案还差一步。有人知道我在哪里犯了错误吗?非常感谢
更新:这是我的 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 }
);
}
编辑:好的,我调试了它。似乎问题出在属性路由中。出于某种原因,控制器忽略了 Download 方法并直接进入 ActionResult ShowTrek...知道如何解决它吗?
尝试将 Fileresult
替换为 FileStreamResult
您可能还需要在方法中创建文件流对象
new FileStream(fileName, FileMode.Open)
public FileStreamResult Download()
{
// Your code
}
已解决。问题出在属性路由中。请在评论中查看 Stephen Muecke 的回答