【发布时间】:2016-09-26 15:48:36
【问题描述】:
我想在我的网站上创建链接,点击后会打开下载窗口(只是一些简单的文本文件)。在几个教程中,我找到了一种方法,但是,由于某种原因,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:
我花了一个小时来解决这个问题,但距离解决方案还差一英寸。有人知道我在哪里犯错吗?非常感谢
更新:这是我的 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 }
);
}
编辑:好的,我调试了它。似乎问题出在属性路由中。出于某种原因,控制器忽略了下载方法并直接进入 ActionResult ShowTrek...知道如何解决它吗?
【问题讨论】:
-
我只是创建了一个简单的 MVC 应用程序,像你一样做一些事情,它工作正常(可以路由到下载和响应文件)。尝试检查您的路由配置。
-
嗨,我不记得从我的路由配置中删除了一些东西,我所做的唯一更改是我启用了属性路由(我在控制器中使用属性路由,但仅在下载方法之后)。我将 RouteConfig 文件的内容添加到问题中。
-
您的
ShowTrek方法会抛出异常,因为它会尝试查找名称等于参数trekname的视图(我假设它是“下载”)。您需要使用return View((object)trekname);或更好地返回具有trekname属性的模型 -
谢谢,我会做的——问题出在属性路由上。或者将下载功能移动到另一个控制器..
标签: asp.net-mvc download actionlink fileresult