2011-08-22 6 views
1

파일을 데이터베이스에 저장하는 MVC 3 프로젝트에 업로드 기능이 있습니다. 각각의 파일을 다운로드 할 링크가있는 데이터베이스의 모든 파일을 나열하는 코드를 작성하려고하지만 많은 성공을 거두지 못했습니다.업로드 된 파일 다운로드 MVC 3

 public ActionResult Download(int id) 
    { 
     var db = GetDataContext(); 
     var file = db.UserFiles.First(f => f.ID == id); 
     return File(file.Data.ToArray(), "application/octet-stream", file.Name); 
    } 

    public ActionResult Index() 
    { 
     var db = GetDataContext(); 
     var files = db.UserFiles.Select(f => new FileViewModel { ID = f.ID, Name = f.Name }); 
     return View(files); 
    } 

내가 ActionResult 지수와 뷰의 코드에서보기를 만들었습니다됩니다 : 다음은 컨트롤러 코드는 나는 또한에 제공 FileViewModel라는 클래스 파일을 생성 한

@Html.ActionLink("Lesson", "Download", "Upload", new { id = 1 }) 

파일이 나열 될 때 데이터가 데이터베이스에서 검색되지 않도록 :
public class FileViewModel 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
} 

내가 파일을 나열합니다 다운로드보기

, 내가 가진 :

@model IEnumerable<DFPProductions_Default.Models.FileViewModel> 

내가 링크를 클릭 할 때 내가 갖는 오류 : 매개 변수 사전이 아닌 nullable 형식 방법 '선택 System.Int32' 'System.Web의 매개 변수'ID '에 대한 널 항목이 포함되어 있습니다. DFPProductions_Default.Controllers.UploadController '에서 Mvc.ActionResult Download (Int32)를 클릭하십시오.

내가 잘못 한 것을 발견하도록 도와주세요. 감사합니다, Amy

답변

0

문제는 당신이 어떤 ID도 컨트롤러에 보내지 않는 것 같습니다. 당신에게 액션 링크를 호출 시도 : @Html.ActionLink("Lesson", "Download", "Upload", new { id = 1 }, null)

또한, 향후 참조를 위해, 당신은 최소한 데이터베이스와의 상호 작용 컨트롤러를 유지해야합니다.

+0

이봐, 고마워. 오류가 변경되었습니다. 이 코드는 컨트롤러에서 'code'return File (file.Data.ToArray(), "application/octet-stream", file.Name)'code '코드를 강조 표시합니다. 개체 참조가 개체의 인스턴스로 설정되지 않았습니다. 왜 그런지 알아? 감사합니다 :) – Amy

+0

파일을 반환하기 전에 코드를'var file = db.UserFiles.FirstOrDefault (f => f.ID == id);'로 변경 한 다음'if (file! = null)'을 수행하십시오. Id가 DB에없는 항목이 있으므로 –

+0

좋아요, 지금은 고마워요. :) ID에 상관없이 데이터베이스의 모든 파일을 나열하려면 어떻게해야합니까? 루프? 내가 정말로하고 싶은 일은 특정 사용자 (누가 역할이 할당되었는지)가 특정 파일을 볼 수있게하는 것입니다. 그것은 음악 학교를위한 것입니다. 그래서 기타 학생들은 예를 들어 기타 수업 만 볼 수 있습니다. 다운로드 ActionResult에 IsInRole 코드를 넣을 수 있습니까? 감사! – Amy

관련 문제