Удаление заявок и загрузка файлов

Последнее обновление: 31.10.2015

Удаление заявок

На представлении Index у нас уже есть ссылки на метод Delete, который будет удалять заявки. Так, теперь добавим этот метод в контроллер:

// Удаление заявки
public ActionResult Delete(int id)
{
    Request request = db.Requests.Find(id);
    // получаем текущего пользователя
    User user = db.Users.Where(m => m.Login == HttpContext.User.Identity.Name).First();
    if (request != null && request.UserId==user.Id)
    {
        Lifecycle lifecycle = db.Lifecycles.Find(request.LifecycleId);
        db.Lifecycles.Remove(lifecycle);
        db.SaveChanges();
    }
    return RedirectToAction("Index");
}

Во-первых, любой зарегистрированный пользователь может просто обратиться к данному методу, например, с помощью запроса Request/Delete/5. Но так как пятая заявка может не принадлежать данному пользователю, то мы вначале вводим проверку на принадлежность заявки, чтобы предотвратить несанкционированное удаление.

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

Функция загрузки файлов

Функция загрузки сохраненных файлов с ошибками будет тривиальна. Добавим в контроллер следующий метод:

// загружаем файл
public ActionResult Download(int id)
{
    Request r = db.Requests.Find(id);
    if (r != null)
    {
        string filename = Server.MapPath("~/Files/" + r.File);
        string contentType = "image/jpeg";

        string ext = filename.Substring(filename.LastIndexOf('.'));
        switch (ext)
        {
            case "txt":
                contentType = "text/plain";
                break;
            case "png":
                contentType = "image/png";
                break;
            case "tiff":
                contentType = "image/tiff";
                break;
        }
		return File(filename, contentType, filename);
    }

    return Content("Файл не найден");
}

Объект Request у нас сохраняет в бд краткое имя файла без полного указания пути. Если файл не был прикреплен к заявке, то значение свойства File будет равно null. В случае если оно определено, получаем полный путь файла в приложении через метод Server.MapPath("~/Files/" + r.File);. Так как предполагается, что файлы у нас в приложении будут сохраняться в папку Files, то мы ее название присоединяем к имени файла для получения полного пути.

Далее получаем расширение файла и в зависимости от него устанавливаем заголовок contentType. И затем метод File возвращает пользователю данный файл.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850