Изображение не загружается в asp.net MVC 5 - PullRequest
1 голос
/ 13 марта 2019

Заранее спасибо за помощь.Я делаю веб-приложение, которое сохраняет файл изображения как часть действий «создать» и «редактировать» на CauseController для этой модели.Однако, несмотря на то, что я успешно смог создать новую папку в каталоге Content и сохранить изображение для каждого созданного экземпляра, я не могу отобразить фотографию во встроенном представлении.

Это класс модели (это для проекта, похожего на change.org):

public class Cause
{   

    [Key]
    [StringLength(100)]
    public string CauseTitle { get; set; }
    [Required]
    [StringLength(500)]
    public string Description { get; set; }
    [Required]
    public string Author { get; set; }
    [Required]
    public DateTime DatePosted { get; set; }
    public string ImageURL { get; set; }
    public string CatagoryTitle { get; set; }
    [ForeignKey("CatagoryTitle")]
    public Catagory Catagory { get; set; }

    public virtual List<Signature> Signatures { get; set; }
}

Это метод действия [Post] Create:

 [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create([Bind(Include = "CauseTitle,Description,Author,DatePosted,CatagoryTitle")] Cause cause, HttpPostedFileBase UploadImage)
    {
        if (ModelState.IsValid)
        {
            if (UploadImage != null)
            {
                if (UploadImage.ContentType == "image/jpg" || UploadImage.ContentType == "image/png" || UploadImage.ContentType == "image/bmp" || UploadImage.ContentType == "image/gif" || UploadImage.ContentType == "image/jpeg")
                {
                    string causeTitle = cause.CauseTitle;
                    string subPath = "~/Content/" + causeTitle; // your code goes here
                    System.IO.Directory.CreateDirectory(Server.MapPath(subPath));

                    UploadImage.SaveAs(Server.MapPath(subPath) + "/" + UploadImage.FileName);
                    cause.ImageURL = subPath + causeTitle + UploadImage.FileName;
                }
                else
                    return View();
            }
            else
                return View();
            db.Causes.Add(cause);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

            ViewBag.CatagoryTitle = new SelectList(db.Catagories, "CatagoryTitle", "CatagoryDescription", cause.CatagoryTitle);
            return View(cause);
        }

И это часть представления:

        @foreach (var item in Model)
{
<div class="jumbotron" style="background-image: url(@item.ImageURL) background-size: 100%" >
    <img src="urlPath" alt="urlPath" />
    <h1>@Html.DisplayFor(model => item.CauseTitle)</h1>
    <p>@Html.DisplayFor(model => item.Description)</p>
    <p><a class="btn btn-primary btn-lg" href="#" role="button">Sign Cause</a></p>
</div>

Полученный элемент отображается так же, как в Chrome Developer для этой попытки.

Я также пробовал это сделать:

@foreach (var item in Model)
    {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.CauseTitle)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Catagory.CatagoryTitle)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Description)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Author)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.DatePosted)
        </td>
        <td>
            <img src="@item.ImageURL" alt="Alternate Text" />
        </td>

Элемент отображается в Chrome Developer для этого примера.В этом случае это правильный путь к файлу.

Я посмотрел в базе данных таблицу «Причины», и значения столбцов ImageUrl следуют этому шаблону (как и ожидалось): ~ / Content / [Заголовок причины] / [Заголовок изображения] .jpg.

Я посмотрел все остальные ответы на подобные вопросы и не смог найти решение, которое бы сработало для меня.Любая помощь будет оценена.Спасибо

1 Ответ

0 голосов
/ 15 марта 2019

Измените ваш окончательный тд, чтобы использовать @ Url.Content, как показано ниже. Это всегда дает относительный путь.

<td>
       <img src="@Url.Content(item.ImageURL)" alt="Alternate Text" />
</td>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...