2016-06-21 11 views
4

MVC 웹 그리드에서 다운로드 기능을 구현하려고합니다. 다음은 데모 코드입니다. 다음은이 코드에서 컨트롤러Base64 문자열을 사용하여 MVC Webgrid에서 문제를 다운로드하십시오.

public ActionResult Index() 
     { 
      Student obj = new Student(); 
      obj.StudentList = new List<Student>(); 
      return View(obj); 

     } 
     [HttpPost] 
     public ActionResult Index(Student obj, HttpPostedFileBase file1) 
     { 
      if (file1 != null) 
      { 
       MemoryStream target = new MemoryStream(); 
       file1.InputStream.CopyTo(target); 
       byte[] data = target.ToArray(); 
       obj.ByteArray = Convert.ToBase64String(data); 
      } 

      obj.StudentList = new List<Student>(); 
      obj.StudentList.Add(obj); 
      return View(obj); 

     } 

@model Fileuploaddemo.Models.Student 

    @{ var grid = new WebGrid(Model.StudentList);} 

    @Html.LabelFor(model => model.Name) 
    @Html.EditorFor(model => model.Name) 

    @Html.LabelFor(model => model.Address) 
    @Html.EditorFor(model => model.Address) 

    @grid.GetHtml(   
        htmlAttributes: new 
        { 
         id = "gridT1", 
         @calss = "" 
        }, 
    tableStyle: "webgrid-table", 
    headerStyle: "webgrid-header",   
    columns: grid.Columns(
    grid.Column(columnName: "Name", header: "Name"), 
    grid.Column(columnName: "Address", header: "Address"))) 

, 나는 DISPL에 노력하고

모델

public class Student 
    { 
     public string Name { get; set; } 
     public string Address { get; set; } 

     public string ByteArray { get; set; } 

     public List<Student> StudentList { get; set; } 

    } 

보기 파일 다운로드 옵션과 함께 MVC 웹 그리드의 학생 세부 정보.

그러나 여기에서, 나는 base64string 형식으로 파일을 다운로드하는 방법을 받고 있지 않다.

문제를 해결할 때 도와주세요.

미리 감사드립니다.

답변

0

"다운로드"링크가있는 WebGrid에 여분의 열을 추가해야합니다.이 링크는 컨트롤러에서 다운로드 작업을 호출하고 클릭 한 학생의 base64 속성을 통과해야합니다.

컨트롤러 :

public class StudentController : Controller 
{ 
    public ActionResult Index() 
    { 
     Student obj = new Student(); 
     byte[] bytes = System.IO.File.ReadAllBytes("F:\\test.txt"); 
     string ba = Convert.ToBase64String(bytes); 

     var s1 = new Student { Name = "Student1", Address = "Address1", ByteArray = ba }; 
     var s2 = new Student { Name = "Student2", Address = "Address2", ByteArray = ba }; 
     var s3 = new Student { Name = "Student3", Address = "Address3", ByteArray = ba }; 

     obj.StudentList = new List<Student>() { s1, s2, s3 }; 
     return View(obj); 
    } 

    [HttpGet] 
    public FileResult DownloadAction(string file) 
    { 
     byte[] fileBytes = Convert.FromBase64String(file); 
     string fileName = "test.txt"; 
     return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName); 
    } 
} 

보기 :

예를 작업, 희망은 당신에게 도움이
+0

나는 이걸 시도했지만 파일을 Base64string 형식으로 저장되어 있기 때문에 actionlink에서 라우팅 값으로 전달할 수 없습니다. –

+0

왜 안되니? 위의 예제를 통해 설명 하겠지만 정상적으로 작동합니다. 어쨌든 컨트롤러의 레코드 ID를 항상 전달할 수 있으며 컨트롤러에서 ID를 사용하여 base64 문자열을 조회하고 수행합니다. 다운로드는 정말 간단합니다. 학생 클래스에 ID 속성을 추가하고 ActionLink를 Html.ActionLink ("Download", "DownloadAction", "Student", new {id = ID}, null)로 변경하십시오. –