Изображение не отображается в списке asp. net MVC. - PullRequest
0 голосов
/ 20 марта 2020

Как отобразить изображения для каждого элемента в виде списка? В моей базе данных есть столбцы ImageName и ImagePath типа nvarchar(MAX). Я могу сэкономить, используя HttpPostedFileBase в представлении модели. Но при получении его в списке, изображение не отображается! Есть ли другой способ для foreach l oop, или у меня неправильный синтаксис?

Как я могу это исправить?

public partial class Course
{
    public int CourseId { get; set; }
    public string CourseTitle { get; set; }
    public string ImageName { get; set; }
    public Nullable<double> Price { get; set; }
    public string Description { get; set; }
    public string ImagePath { get; set; }
}

public class CourseViewModel
{
    public string CourseTitle { get; set; }
    public HttpPostedFileBase ImageFile { get; set; } 
    public Nullable<double> Price { get; set; }
    public string Description { get; set; }
    public string ImagePath { get; set; }
}

public ActionResult Index()
{
    var courses = db.Courses.ToList();
    return View(courses);
}

public ActionResult Create(FormCollection collection, CourseViewModel courseVM, HttpPostedFileBase ImageFile)
{
        try
        {
            if (!ModelState.IsValid)
            {
                return View(courseVM);
            }
            else
            {
                var image = ImageFile;

                if (image!=null && image.ContentLength>0)
                {
                    Course course = new Course();

                    var imageName = Path.GetFileName(image.FileName);
                    var imageExtention = Path.GetExtension(imageName);
                    imageName = imageName + DateTime.Now.ToString("yymmssfff") + imageExtention;
                    course.ImageName = imageName;

                    var imagePath = "~/App_Data/Images/" + imageName;
                    var path = Path.Combine(Server.MapPath("~/App_Data/Images/"), imageName);
                    image.SaveAs(path);

                    course.ImagePath = path;
                    course.CourseTitle = courseVM.CourseTitle;
                    course.Description = courseVM.Description;
                    course.Price = courseVM.Price;

                    db.Courses.Add(course);
                    db.SaveChanges();

                    return RedirectToAction("Index");
                }
                else
                {
                    return View(courseVM);
                }
            }
        }
        catch
        {
            return View();
        }
}        

Это мой вид списка для столбца изображения:

@model IEnumerable<MyProject.Models.Course>

@foreach (var item in Model) {
    <tr>

        <td>
            <img src="@Url.Content(item.ImagePath)" width="100" height="100" alt="Image" />

        </td>
    </tr>

1 Ответ

0 голосов
/ 20 марта 2020

Первое, на что я посмотрю, это текст, который записывается в атрибут src="" вашего тега привязки. В Chrome щелкните правой кнопкой мыши место, где должно быть изображение, и нажмите «Осмотреть».

Я подозреваю, что здесь неправильно сформирована строка. В документации по свойству HttpPostedFileBase.FileName указано, что при этом возвращается «Имя файла на клиенте, которое включает путь к каталогу».

...