コードを表示:
@if (File.Exists(Server.MapPath("~/Images/Cakes/" + Html.DisplayFor(modelItem => Model.CakeImage))))
{
@model TastyCakes.Models.Cakes
<form name="deletePhoto" action="/Cakes/DeletePhoto" method="post">
@Html.AntiForgeryToken()
File name of image to delete (without .jpg extension):
<input name="photoFileName" type="text" value="@Html.DisplayFor(modelItem => Model.CakeImage)" />
<input type="submit" value="Delete" class="tiny button">
</form>
} else {
<p>*File Needs to be uploaded</p>
}
コントローラーコード:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult DeletePhoto(string photoFileName)
{
ViewBag.deleteSuccess = "false";
var photoName = "";
photoName = photoFileName;
var fullPath = Server.MapPath("~/Images/Cakes/" + photoName);
if (File.Exists(fullPath))
{
File.Delete(fullPath);
ViewBag.deleteSuccess = "true";
}
}
(File.Exists)AND File.Deleteの場合、コードの下に波線があります。だから、ファイルを削除するために必要な構文を見つけようとしています。
これがコントローラーのコードのスクリーンショットです。
更新:コードが機能するようにし、ブログで簡単なコード例を作成しました。 http://httpjunkie.com/2014/724/mvc-5-image-upload-delete/
使用する Request.MapPath
string fullPath = Request.MapPath("~/Images/Cakes/" + photoName);
if (System.IO.File.Exists(fullPath))
{
System.IO.File.Delete(fullPath);
}
使用しているFile
は曖昧であるため、「波線」です。 IDEはあなたが意味するものを解決できません。
System.Web.Mvc.Controller.File()
または
MVCコントローラー内でFile APIを使用する場合は、完全修飾名を使用してください。
この関数を作成しました
private bool RemoveFileFromServer(string path)
{
var fullPath = Request.MapPath(path);
if (!System.IO.File.Exists(fullPath)) return false;
try //Maybe error could happen like Access denied or Presses Already User used
{
System.IO.File.Delete(fullPath);
return true;
}
catch (Exception e)
{
//Debug.WriteLine(e.Message);
}
return false;
}
そしてここにそれの簡単な使用法があります
RemoveFileFromServer("Content\img\ProfilePictures\User12.png");
追加 using System.IO;
コントローラーの上部。
PlacesControllerという名前のコントローラーがあるとします。その中にIHostingEnvironmentオブジェクトを作成して初期化します。
private readonly TouristPlaceInformationContext _context; //database context object. not necessary for this solving current problem. but it is used for database queries.
private readonly IHostingEnvironment _he;
public PlacesController(TouristPlaceInformationContext context, IHostingEnvironment he)
{
_context = context;
_he = he;
}
次の関数では、_he.WebRootPathを使用して、「wwwroot」フォルダーまでのパスを取得します。 _he.ContentRootPathを使用して、プロジェクトのルートフォルダーまでのパスを取得します。次のパスにあるファイルを削除するとします: "projectRoot/wwwroot/images/somefile.jpg"。次の関数がジョブを完了させます。
public void deleteFile(string filename){
String filepath= Path.Combine(_he.WebRootPath,"images", filename);
if (System.IO.File.Exists(prevFilePath))
{
System.IO.File.Delete(prevFilePath);
}
}