2015-04-12 50 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