2012-01-03 31 views
0

私はダウンロードリンクをjqgridに入れました。私のファイルはデータベースに保存されていないサーバーに保存されています。ファイルは種類が異なります(拡張子) ダウンロードリンクをクリックするとファイルをダウンロードします。ASPでファイルをダウンロードするmvc .net

function DownLoadFile(param) { 
$.ajax({ 
url: "/Home/GetFile?parameter=" + param, 
    cache: false, 
    type: "POST", 
    async: false 
}); 

}を次のようにFollws

public object GetJSONFormatProjectDetails(List<ProjectMasterDTO> listProjectDTO, int SkipCount) 
    { 
     var data = (listProjectDTO.Select(c => new 
     { 
      id = c.ProjectID, 
      cell = new[] 
         { 
          c.ProjectName, 
          c.OfficeName, 
          c.ProjectType, 
          c.ProjectNature, 
          c.EntrepreneurName, 
          c.Year + " Years " +c.Month + " Months " + c.Day + " Days" , 
          c.ConcessionWEFdate, 
          c.ProjectStartDate, 
          c.ProjectEndDate, 
          c.isRoadApplicable, 
          (c.FilePath != "NA") ? "<a href='#' style='color:green' onclick='DownLoadFile(\""+URLEncrypt.EncryptParameters(new string[]{ "filepath =" +c.FilePath.Replace("/","$").Replace(" ","#").Trim()})+"\");return false;'>"+(c.FilePath != "NA" ? "DownLoad":"Not Available") + " </a>" : "<span style='color:Red' >Not Available</span>" 

         } 
     })).ToArray().Skip(SkipCount); 
     return data; 
    } 

JSファイルのコードであるとして読み込みjqgridについて

コードであります

コントローラでのコードのヌルと

例外処理の復帰について

public ActionResult GetFile(string parameter) 
    { 
     string queryStringParameters = Request.QueryString["parameter"]; 

     if (queryStringParameters == null) 
     { 
      throw new Exception("Url is tampered"); 
     } 

     string[] parameterArray = queryStringParameters.Split('/'); 

     string param = null; 
     string hash = null; 
     string key = null; 
     if (parameterArray.Length == 3) 
     { 
      param = parameterArray[0]; 
      hash = parameterArray[1]; 
      key = parameterArray[2]; 
     } 
     if (!(string.IsNullOrEmpty(parameter))) 
     { 
      Dictionary<string, string> parameters = URLEncrypt.DecryptParameters(new string[] { param, hash, key }); 
      string FilePath =string.Empty ; 
      parameters.TryGetValue("filepath", out FilePath); 
      FilePath = FilePath.Replace('$','\\'); 

      // DownloadFile(FilePath); 

      string name = Path.GetFileName(FilePath); 
      string ext = Path.GetExtension(FilePath); 
      string type = ""; 
      // set known types based on file extension 
      if (ext != null) 
      { 
       switch (ext.ToLower()) 
       { 

        case ".pdf": 
         type = "Application/pdf"; 
         break; 

        case ".doc": 

        case ".docx": 
         type = "Application/msword"; 
         break; 

        case ".jpg": 

        case ".bmp": 

        case ".tiff": 

        case ".png": 

        case ".gif": 

        case ".jpeg": 
         type = "Application/Image"; 
         break; 
        default: 
         type = "Application"; 
         break; 

       } 
      } 
      Response.AppendHeader("content-disposition", "attachment; filename=" + name); 

      if (type != "") 
      { 
       Response.ContentType = type; 
      } 
      String FullFilePath = @"F:\MHTOLL\ContractUploadDetails\" + name; 
      //return File(new FileStream(path + fileName, FileMode.Open), "text/plain", fileName); 
      // return File(new FileStream(FullFilePath, FileMode.Open), type, name); 
      return File(FullFilePath, type,name); 

     } 
     return null; 
    } 

いけない心を次のようにも、ファイルをダウンロードするための.GIFアニメーションを表示するために提案します。

答えて

1

AJAX呼び出しを使用してファイルをダウンロードすることはできません。

私はこの答えはあなたが望むものを得るだろうと思う。ダウンロードのプロンプトとMIMEタイプについてのコメントを必ず読んでください。 Download File Using Javascript/jQuery

0

最近同じ問題が発生し、AJAXがファイルをダウンロードできないことに気付きました。

@Html.ActionLink("ButtonName", "controllerFunctionName", "controllerName", new { functionParamName = paramValue })

そして、あなたは、コントローラであなたの関数が含まれます:代わりにActionLinkのを試してみてください

public ActionResult controllerFunctionName(type functionParamName){ // do your download here }

+0

は簡単に言えば、AJAXはResponse.functionコールでうまく動作しません。しかし、なぜ誰かが私のためにこれを説明することができれば、私は理由がありません。 – lohiaguitar91

+0

ここで私が最初に問題を投稿した場所は次のとおりです。http://stackoverflow.com/questions/15458477/response-writefile-not-working-asp-net-mvc-4-5/15577763#15577763私はAJAXを使用していましたが、問題としてそれを見ませんでした。私はバグがコントローラ機能にあると思った。 – lohiaguitar91