2015-04-12 70 views
0

我将点击ActionLink的名称传递给控制器​​并使用它的问题。单击时出现404错误。 这就是我所谓的Scan.cshtmlActionLink引发HTTP 404.0 - 未找到错误// ASP.NET MVC

<tbody > 
       @foreach (string item in ViewBag.files) 
       { 
        <tr> 
         <td class=" row col-md-12 "> @Html.ActionLink(item, "Download", "Scan", new { id = item }, new { style = "color: #424242" })</td> 
        </tr> 
       } 
      </tbody> 

视图的一部分这是我在尝试与发送的数据进行操作的部分来自ScanController。我认为它根本没有达到控制器逻辑,并且更快抛出错误。

public ActionResult Download(string id) 
    { 
     // controller logic for downloading file 
     var ftpko = new MyProject.Helpers.ftp(@path, name, passwd); 
     ftpko.download(id, "~/Dotazniky/dotaznik.jpg"); 

     return View(); 
    } 

比方说,项目= “car.jpg” 说,要求误差路径 - http://localhost:53593/Scan/Download/car.jpg没有找到。

这是RouteConfig文件:

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 

回答

1

的问题是,你有.jpg结束你的URL名称,并请求将要搜索的内容文件,而不是执行的行动。

有办法可以禁用这个,但我认为最简单的解决方案是发送nameextension在单独的参数。

行动成为:

public ActionResult Download(string name, string ext) 
{ 
    string id = name + "." + ext; 

添加一个新的路由

routes.MapRoute(
     name: "TwoParameters", 
     url: "{controller}/{action}/{name}/{ext}", 
     defaults: new { controller = "Home", action = "Index"} 
    ); 

修改ActionLink

@{ var params = item.Split('.'); } 
@Html.ActionLink(item, "Download", "Scan", new { name = params[0], ext = params[1] }, new { style = "color: #424242" }) 

注:还有其他的方法(别人比.Split('.'))取扩展和fi lename。

+0

谢谢你的超快答案。你是对的。它真的是这个问题。我希望这将有助于其他人在将来面临同样的问题。 – sustekj