2015-02-12 4 views
2

Я работаю с проектом MVC5, я создал простую систему, которую пользователь может загрузить файл «CV» для каждого сотрудника. Теперь все работает для меня отлично, кроме «DELETING File». Мне нужно добавить метод действия для удаления загруженного файла и возможность его замены другим файлом.Удалить Загруженный файл в MVC5?

в классе модели Я создал два свойства HttpPostedFileBase CV, чтобы сохранить загруженный файл и String cvName, чтобы сохранить имя файла и использовать его для создания ссылки на этот файл.

В контроллере, что я сделал:

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult DeleteCV(string cvName) 
{ 
    //Session["DeleteSuccess"] = "No"; 
    var CVName = ""; 
    CVName = cvName; 
    string fullPath = Request.MapPath("~/Content/CVs/" + CVName); 

    if (System.IO.File.Exists(fullPath)) 
    { 
     System.IO.File.Delete(fullPath); 
     //Session["DeleteSuccess"] = "Yes"; 
    } 
    return RedirectToAction("Index"); 
} 

и это мнение:

<div class="form-group"> 
    @Html.LabelFor(model => model.CV, htmlAttributes: new { @class = "control-label col-md-2" }) 
    <div class="col-md-10"> 
     @{ 
      if (File.Exists(Server.MapPath("~/Content/CVs/" 
      + Html.DisplayFor(model => model.cvName)))) 
      { 
       <a href="~/Content/CVs/@Html.DisplayFor(model => model.cvName)"> @Html.DisplayFor(model => model.cvName) @Html.HiddenFor(model => model.cvName)</a> 
       <a href="@Url.Action("DeleteCV", new { @Model.cvName })"> 
        <img src="@Url.Content("~/Content/Images/Delete.jpg")" width="20" height="20" class="img-rounded" /> 
       </a> 
      } 
      else 
      { 
       <input type="file" name="file" accept="pdf" /> 
      } 
     } 
    </div> 
</div> 

Я не могу удалить файл, каждый раз, когда появляется это сообщение

Ресурс не найден.

Описание: HTTP 404. Ресурс, который вы ищете (или его зависимости), мог быть удален, изменилось его имя или временно недоступно. Просмотрите следующий URL-адрес и убедитесь, что оно написано правильно.

Запрошенный URL:/DeleteCV

+2

Итак, что это вопрос? Кажется, ваш код в порядке. Что не работает? Какие сообщения об ошибках вы получаете (если есть)? –

+0

Всего пару нот: наверняка это должно быть использование глагола DELETE? измените его, чтобы использовать HttpDelete, чтобы проверить семантику. Кроме того, в чем проблема? вы можете отправить сообщение об ошибке? – iwayneo

+0

@iwayneo uhm, нет, вы не можете отправить DELETE из формы. И не называй меня Ширли. – CodeCaster

ответ

7

вы отправляете GET к POST

Измените [HttpPost] на [HttpGet]

Или использовать JQuery и отправить DELETE глагол, как я уже говорил в комментарии

+0

спасибо большое, но когда я попытался сделать это, у меня возникла эта проблема: Необходимое поле формы для подделки «__RequestVerificationToken» нет. ,, , – Tuta

+0

, потому что у вас есть ValidateAntiForgeryToken на GET - вам нужно решить, что вы здесь делаете. ValidateAntiForgeryToken предназначен для проверки токенов antu CSRF в HTTP POST – iwayneo

+0

@Tuta - Удалить '[ValidateAntiForgeryToken]'. Это относится только к отправке форм, а не простые ссылки. –

2

Вы используете <a href="@Url.Action("DeleteCV", new { @Model.cvName })"></a>, поэтому ваша ссылка станет /Controller/DeleteCV?cvName=SomeName, который будет выполнен как GET. Вы не хотите этого по многим причинам, и, честно говоря, остальная часть кода тоже беспорядок. Не делайте бизнес-логику (например, проверку файла) в своем представлении, и вы можете добавить несколько проверок вокруг этого File.Delete().

Выполните проверку файла в контроллере, сохраняя результат в переменной модели, а также создать отдельную форму, чтобы отправить к вашему методу удаления:

if (@Model.FileExists) 
{ 
    @using(Html.BeginForm("Cv", "DeleteCV", FormMethod.Post)) 
    { 
     @Html.AntiForgeryToken() 
     @Html.HiddenFor(m => m.cvName) 
     <input type="submit" value="Delete" /> 
    } 
} 
else 
{ 
    @using(Html.BeginForm("Cv", "UploadCV", FormMethod.Post)) 
    { 
     @Html.AntiForgeryToken() 
     <input type="file" name="file" accept="pdf" /> 
     <input type="submit" value="Upload" /> 
    } 
} 
+0

что он сказал :) – iwayneo

Смежные вопросы