2014-03-05 4 views
0

1 년 전 MVC에서 일부 코드를 작성했으며 프레임 워크에 대한 지식이 사라진 것 같습니다. 아래 코드 블록에서 디렉토리의 모든 파일을 나열하고 다운로드 한 링크를 제공합니다 (인증 된 사용자의 경우). 내가하고 싶은 것은 각 파일을 삭제할 수있는 옵션을 제공하는 것이다. 방금 삭제 버튼을 추가했는데 거기에서 어디로 가야할 지 모르겠습니다.MVC 디렉토리에서 파일 삭제

@{IEnumerable<string> enumerateFiles = Directory.EnumerateFiles(Server.MapPath("~/Content/Documents"));} 
@{ 
    if (Request.IsAuthenticated) 
    { 
     <h3>Authenticated User: @User.Identity.Name</h3> 
     <h4>-Downloadable Files-</h4> 
<ul> 

    @foreach (var fullPath in enumerateFiles) 
    {   
     var fileName = Path.GetFileName(fullPath); 

      <li> <a href="../../Content/Documents/@fileName"> @fileName</a> 
      <button type="button" id="fileRemover" value="Delete" onclick="return confirm('Are you sure?')" >Delete</button> 
      </li> 
    } 
</ul> 
    } 
else 
{ 
    <h3>Non-Authenticate User, register and/or login to see documents</h3> 
} 
} 
+1

모든 C#을보기 밖으로 이동해야합니다. 이렇게하면 서버 측과 클라이언트 측의 차이점에 대한 기억이 다시 잡힐 것입니다. –

답변

0

파일을보고 파일을 삭제하는 코드는 컨트롤러 내에 있어야합니다. 보기는 단순히 사용자의 모델 정보를 사용자에게 표시하기위한 것입니다. 내가 당신이라면

,이 같은 내 컨트롤러를 구성합니다 :

public class FilesController : Controller 
{ 
    public ActionResult List() 
    { 
     List<FileInfo> model = new List<FileInfo>(); 
     // Grab all file names from the directory and place them within the model. 

     return View(model); 
    } 

    public ActionResult View(string fileName) 
    { 
     // Add header for content type 
     // Grab (and verify) file based on input parameter fileName 

     return File(...); 
    } 

    public ActionResult Delete(string fileName) 
    { 
     // Verify file exists 
     // Delete file if it exists 

     return RedirectToAction("List"); 
    } 
} 
+0

그게 내가 시도한 첫 번째 일 이었어. 파일 이름을 삭제 작업에 전달하는 방법을 알 수 없습니다. 내가 볼 수있는 @HML.BeginForm ("Delete", "Home", FormMethod.Post) { } – flaVius

+0

위 예제를 기반으로 실제로 수행 할 수있는 두 가지 방법이 있습니다. a) 쿼리 문자열의 일부로 파일 이름이있는 링크를 삭제하십시오 (삭제 작업이 GET HTTP 동사를 사용할 수 있다고 가정 함). 예 : Delete b) 삭제 버튼을 클릭하면 자바 스크립트가 실행됩니다. javascript는 숨겨진 양식 필드 (id = "fileName")를 채 웁니다. 숨겨진 필드가 채워지면 양식을 제출하십시오. –

0

파일 이름은 HTTP의 POST 변수로 와야한다.

양식을 제출할 때 작업의 값에 액세스 할 수 있도록 파일 이름을 저장할 숨김 필드를 만들어야합니다.

액션 이름 위에는 [HttpPost] 속성을 사용하여 양식 제출이이 작업에 착륙하도록합니다.

HTTP GET 대신 HTTP POST를 사용하는 것이 안전합니다. 그렇지 않으면 URL이있는 모든 사용자가 파일을 삭제할 수 있습니다. 여러 파일 이름이 있으면 내가 당신에게 & 조사 보는 방향을 준

는 각 숨겨진 필드는 filename_2 등 filename_1, 같은 이름을 가질 수 있습니다.

관련 문제