저자가 파일을 업로드 할 수있는 간단한 CMS를 만들려고합니다. (특히 이미지는 있지만 파일 형식은 현재 중요하지 않습니다.)보기에 파일 이름 전달하기
파일 업로드가 정상적으로 작동합니다. 그러나 나는 파일을 나열하고 나중에 삭제할 수있는 기능을 제공하려고합니다. (나중에는 여러 개의 파일이 필요하지만 지금은 한 번에 하나의 파일 만 있으면됩니다.)
나는 그물을 둘러 보았다. DB에 파일의 위치를 저장하기 위해 EF를 사용하는 예제가 많이 있습니다. 예를 들어, 권한과 역할 등을 가지고 있기 때문에 앞으로는 필 요할 것입니다. 복잡성의 레이어가 아니라 바로 추가 할 의향이 있습니다. 지금.
내가 원하는 것은 단순히 삭제 링크를 누르는 것입니다 (마치 DB에서 레코드를 삭제하는 것처럼). 삭제 확인보기를 호출하는 작업을 트리거하려면. 그런 다음 해당보기에서 삭제 단추를 사용하여 실제로 파일을 삭제하고 사용자를 목록으로 되돌립니다. 다음은 내 코드는 지금까지 : 그것은 비교적 간단하고 나는 데 문제가 없습니다 (I의 나는이 뷰의 컨트롤러를 보여 실 거예요
@model IEnumerable<FileInfo>
@{
ViewBag.Title = "File List";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Upload", "Upload")
</p>
<table class="table">
<tr>
<th>File Name</th>
<th>Actions</th>
</tr>
@foreach (FileInfo file in Model)
{
<tr>
<td>@file.Name</td>
<td>@Html.ActionLink("Delete", "Delete", new { fileName = @file.Name })</td>
</tr>
}
</table>
:
이이 파일을 나열 뷰 것 생각한다). 너가 삭제 연결을 볼 수 있고 나에게 틀린 것이 있으면 저에게 말하기 위하여 나는 이것을 단지 보였다. 내가 연결되지 않는 경우 아래
@model FileInfo
@{
ViewBag.Title = "Delete";
}
<h2>Delete</h2>
<h3>Are you sure you want to delete this?</h3>
<dl class="dl-horizontal">
<dt>
@Html.DisplayNameFor(model => model.FullName)
</dt>
<dd>
@Html.DisplayFor(model => model.FullName)
</dd>
</dl>
@using (Html.BeginForm("Delete", "FileManagement", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
<div class="form-actions no-color">
@Html.ActionLink("Back to list of views", "Index", null, new { @class = "btn btn-success" })
|
@*@Html.ActionLink("Delete", "Delete", null, new { @class = "btn btn-danger" })*@
<input type="submit" value="Delete file" formaction="Delete" formmethod="delete" class="btn btn-danger" />
</div>
}
는 (GET과 POST가/삭제)
// GET: FileManagement/Delete/filename
public ActionResult Delete()
{
return View();
}
// POST: FileManagement/Delete/filename
[HttpDelete]
[ValidateAntiForgeryToken]
public ActionResult Delete(string fileName)
{
var path = Path.Combine(Server.MapPath("~/UserFiles"), fileName);
if (System.IO.File.Exists(path))
System.IO.File.Delete(path);
else
return HttpNotFound();
return RedirectToAction("Index");
}
내가보기 모델이없는이 삭제 작업입니다 : 아래
은 삭제 확인이다 데이터베이스 (아직). 파일은 ~/UserFiles/someFileName.ext 폴더에 업로드되고 전체 경로는 일반적인 방법으로 server.mappath에 추가됩니다.문제는 삭제 확인보기에 파일 이름이 표시되고 삭제 작업에 파일을 전달하는 삭제 버튼에도 표시됩니다.
도움 주셔서 감사합니다.
양식은 어떤 값을 게시하지 않습니다 - 당신은 입력하거나 값 때문에 fileName''에 대한 경로 값이없는 'string {file}'매개 변수는 항상'null'이됩니다. ('new {enctype = "multipart/form-data"}'는 필요 없습니다 - 서버에 파일을 업로드하기 위해서만 필요합니다) –
GET 메소드는 'ActionLink()'에서'fileName'을받을 매개 변수가 있어야합니다. 그리고 나서 뷰에 모델을 전달하지 않으므로'null'이됩니다 (그리고 메인 뷰에서 확인 표시를 고려해야합니다) –
어떤 이유로 든 삭제 확인 양식에 파일 이름이 표시되지 않습니다. 나는 내가 삭제보기 버튼을 클릭했을 때 초기보기 (목록)에서 그것을 얻고 있다고 가르쳤지 만 어떤 이유에서 삭제 확인 양식을 보지 않았다. 필드 이름과 값 위에 삭제보기의 양식을 이동하면 도움이 될까요? 아마도 파일 이름이있는 목록 양식에 숨겨진 컨트롤을 넣고 삭제 컨트롤러에서 어떤 방식으로 읽어야합니까? 또는 viewbag/data를 사용합니까? –