Рейтинг:
8
David_Wimbley
Если ваш образ не показывает его, потому что он не существует. Убедитесь, что файл D:\VS 2013\BusinessClass2\BusinessClass2\Img\butterfly (Butterfly).jpg существует и что ваше веб-приложение имеет надлежащие права безопасности на этот файл/каталог.
tahirraza21
Изображение с таким же именем присутствует в этой конкретной папке.. есть ли другой способ сохранить только ~\Img\pic.jpg вместо того чтобы сохранить весь путь к корневому каталогу
David_Wimbley
Когда вы говорите только сохранить ~/Img/pic.jpg вы хотите сказать, что сохраняете путь к файлу в БД?
tahirraza21
Да, конечно .. предположим, я запускаю это решение на любой другой машине, у которой нет диска "D:", и вам лучше знать, что произойдет??
David_Wimbley
Вам нужно либо разместить все файлы в папке в вашем решении проектов.
Например, у вас должна быть папка с надписью Content. Внутри этой папки добавьте еще одну, называемую Images. Тогда каталог, который вы сохраните, будет ~ / Content/Images. В другом столбце вы можете сохранить имя файла, а затем объединить эти два столбца, чтобы получить путь к файлу.
Если вы не хотите конкатенировать, то просто сохраните ~ / Content/Images/< image>. png в этом столбце. На ваш взгляд, то вы должны использовать &ЛТ;ИМГ СРЦ='@URL-адрес.Содержание("~/Содержание/образы/&ЛТ;изображения&ГТ;.формат PNG")' /&ГТ; для просмотра этого файла.
Отображение файла таким образом устранит необходимость в диске d:\ на системном компьютере, на котором будет развернуто это приложение.
tahirraza21
Звучит хорошо.Попробую и эту логику. Может у PLZ понятно еще одна вещь, что б синтаксисом Razor тогда?
@URL-адрес.Содержание(пункт.путь_к_образу)?? Или (item. image_path+image_name)
David_Wimbley
Если вы решите хранить весь файл в одном столбце, ваш синтаксис будет следующим
&ЛТ;ИМГ СРЦ="@URL-адрес.Содержание(Модель.путь_к_образу)" /&ГТ;
Если вы решите хранить каталог (~/Content/Images/) и файл (myimage.png) в двух разных столбцах. Ваш синтаксис будет следующим
< img src= "@Url. Content(Model.image_path + Model. image_name) " />
Одно замечание о последнем с двумя столбцами, нужно убедиться, что вы храните конечную косую черту в столбце image_path в своей базе данных.
tahirraza21
я обновил контроллер:
var path = путь.Комбайн (Сервер.MapPath ("~/Content/Img"), myfile);
но он все равно сохраняет весь каталог
D:\VS 2013\BusinessClass2\BusinessClass2\Content\Img\picture(res). jpg
ввиду им с помощью цикла foreach, как я также извлечения других данных тоже
@по каждому элементу (ВАР деталь в модели) {
<tr>
< td>
@Html. DisplayFor(modelItem = & gt; item.Emp_name)
< / td>
< td>
&ЛТ;ИМГ СРЦ="@URL-адрес.Содержание(пункт.Emp_image)" высота="150" ширина="140" стиль="границы:твердых" /&ГТ;
< / td>
все еще не работает,это выглядит просто, но я новичок в MVC
David_Wimbley
Ваша проблема заключается в том, что ваша база данных / где бы она ни хранилась D:\VS 2013\BusinessClass2\BusinessClass2\Content\Img\picture(res). jpg. Вы не можете хранить полный путь к файлу и ожидать, что он появится там, где должен быть.
В базе данных вы храните ~/содержание/ИМГ/изображения(ВИЭ).JPG или D:\VS 2013\BusinessClass2\BusinessClass2\контент\Гуи\картинка(ВИЭ).формат JPG.
Вы упомянули, что просматриваете источник, и он указывает на D:\VS 2013\BusinessClass2\BusinessClass2\Content\Img\picture(res). jpg, что наводит меня на мысль, что вы неправильно храните значение в своей базе данных. В этом конкретном случае вы должны хранить ~ / Content/Img/picture(res). jpg в своей базе данных, если храните местоположение изображения в одном столбце.
Помните, что у меня нет доступа к вашему жесткому диску, поэтому я не вижу точной причины/проблемы, с которой вы столкнулись, но то, что я указал вам в направлении этого, - это путь.
Мое предложение состоит в том, чтобы разбить это на более мелкие части, чтобы выяснить, в чем заключается истинная проблема.
1) Возьмите изображение, поместите его в каталог Content/Image вашего проекта mvc. Получите это изображение для рендеринга в виде, загрузив его в модель с вашего контроллера. Визуализируйте его через < img src= "@Url. Content(Model. myimage) " />.
2) Как только вы получили 1) работу, затем возьмите образец из вашей базы данных и жестко Закодируйте его в свой контроллер. Просматривая эти значения с вашего контроллера аналогично тому, что вы опубликовали, посмотрите, отображаются ли они.
3) затем реализовать из базы данных.
Если шаги 1, 2 работают, а Шаг 3-нет. Проблема заключается в том, как вы храните значения в базе данных. Нет никаких причин, по которым шаги 1 и 2 не должны работать, если только это не проблема с правами на вашем компьютере (то есть IIS не имеет доступа к каталогу или тому, что не является возможным после развертывания).
tahirraza21
Thnx man..1 и 2 работают отлично.на мой взгляд, я делаю что-то не так в контроллере,так что плз взгляните(точный код)
[HttpPost]
public ActionResult Create(файл HttpPostedFileBase)
{
imagepath img = new imagepath (); / / таблица содержит детали изображения
allowedExtensions ВАР = новый[] {".Форматы jpg", ".файл PNG", ".форматах JPG, формате JPEG" };
рис.imagee = файл.ToString (); / / полный url-адрес
ВАР имя = путь.GetFileName(файл.FileName); / / только имя файла
ВАР ВН = путь.GetExtension(файл.Имя файла); / / расширение
if (allowedExtensions.Содержит (ext)) / / проверка расширения
{
string name = Path. GetFileNameWithoutExtension(fileName); / / имя файла без расширения
строка myfile = name + ext;
var path = путь.Комбайн (Сервер.MapPath ("~/Content/Img"), myfile);
рис.imagee = путь;
параметр obj.imagepaths.Добавить (img);
obj. SaveChanges();
файл.SaveAs(путь);
return RedirectToAction ("создать");
}
ещё
{
ViewBag. message = " Пожалуйста, выберите только файл изображения";
}
возвращение смотреть();
David_Wimbley
Покажите мне ваш код в поле зрения/что говорит ваша модель. Я думаю, что вижу проблему, но мне нужно знать, что делает вид.
tahirraza21
Смотреть:
< table class= "таблица">
<tr>
< th>
@HTML-код.DisplayNameFor(модель =&ГТ; модель.imagee)
< / th>
< th>
@HTML-код.DisplayNameFor(модель =&ГТ; модель.название)
< / th>
в <ом&ГТ;&ЛТ;/й&ГТ;
< / tr>
@по каждому элементу (ВАР деталь в модели) {
<tr>
< td>
&ЛТ;ИМГ СРЦ="@URL-адрес.Содержание(пункт.imagee)"/&ГТ;
< / td>
< td>
@Html. DisplayFor(modelItem => item.name)
< / td>
< / tr>
}
< / Таблица>
Модель:
пространство имен PathInDatabase
{
использование системы;
использование системы.Коллекции.Общий;
общественный разделяемого класса, продуктам
{
public int id { get; set; }
public string imagee { get; set; }
public string name { get; set; }
}
}
David_Wimbley
Итак, первая причина, по которой я запутался, по вашему мнению, у вас должно быть объявление @model imagepath. Я предполагаю, что этого просто не хватает.
Второй. В вашем контроллере я не вижу, чтобы вы передавали модель обратно в представление. Все что я вижу это перенаправление
return RedirectToAction ("создать");
Третий. Если бы все вышеперечисленное работало так, как задумывалось. Мне кажется, я вижу, что вы используете местоположение загруженного файла из HttpPostedFileBase в качестве значения imagee в вашем представлении. Я создал этот фрагмент на gist и добавил комментарии с примечаниями.
В вашем контроллере есть вещи,которые не обязательно складываются. Но я собираюсь предположить, что они все работают. Как бы то ни было, я считаю, что ваша проблема связана со значением img.imagee, которое вы устанавливаете.
https://gist.github.com/dwimbley/1451a58e32576beb73c960fb5f436ed1
tahirraza21
Thnks alot, я так благодарен за всю вашу поддержку.
David_Wimbley
Рад слышать, что все получилось. Если у вас есть какие-либо другие вопросы, я с радостью помогу.
tahirraza21
Как я уже говорил ранее, MVC является для меня новым, приходящим frm Classic ASP.Я создаю небольшие проекты, такие как сохранение виртуальных свойств, изображений в БД,как обрабатывать каскадный выпадающий список, значения флажков и т. д. сталкиваюсь с проблемами, но изо всех сил стараюсь преодолеть эти проблемы, ища и читая различные блоги таких людей, как вы :-)
tahirraza21
Привет, Дэвид, я застрял в бессмысленном сценарии, но я знаю, что ты можешь вытащить меня из него.
*Можно ли вставить несколько путей изображения в один столбец в БД..
т. е. ID | Name | Image_Path
1. Азбука. Множественный. ImgPaths
* извлечение всех путей изображения
Мне не нужен описательный код, просто скажите мне способ, чтобы я мог справиться с этой странной ситуацией.
David_Wimbley
Итак, вы хотите хранить несколько изображений в одной строке базы данных? Или вы хотите знать схему хранения нескольких изображений в одном столбце?
Я бы предложил хранить 1 изображение в строке. Итак, один столбец-несколько строк.
То, как вы это сделаете, это что-то вроде
Объявить @изображений таблице (
Id INT IDENTITY (1,1) NOT NULL PRIMARY KEY,
ImagePath varchar(255) NULL
);
Вставить в @Images (ImagePath) значения ('c:\path\to\image\1.png');
Вставить в @Images (ImagePath) значения ('c:\path\to\image\2.png');
Вставить в @Images (ImagePath) значения ('c:\path\to\image\3.png');
Вставить в @Images (ImagePath) значения ('c:\path\to\image\4.png');
Вставить в @Images (ImagePath) значения ('c:\path\to\image\5.png');
Есть смысл?
Затем в вашем коде, если вы используете entity framework. Вы бы получили доступ к нему с помощью
foreach (var image in context.Изображения)
{
var mypath = изображение.Продуктам;
}
Это то, что вы искали?
tahirraza21
Таблицы у меня есть :
Клиент (содержит основную информацию)
TaskDetail (TaskID, CustomerID, здесь я хочу сохранить изображения, предоставленные клиентом). Это означает, в одной строке несколько путей изображения могут быть вставлены,что оно может быть 1 путь или 2, или может больше чем 2
Примечание: возможность загрузки нескольких изображений через FileUpload является динамической ,
David_Wimbley
Итак, если я правильно вас понял, вы хотите хранить несколько изображений в одном ряду.
Поэтому отвечу на ваш вопрос так, как вы его задали. Вы должны сохранить файлы в один столбец, используя разделитель...что-то вроде символа трубы - > | или две стрелки <<. Таким образом, несколько путей изображения в одной строке будут выглядеть следующим образом c:\path\to\image1.png/c:\path\to\image2.png.
Оттуда вы бы воспользовались .Раскол в C#. так бы и сделали.
foreach (var item in context. Customer)
{
var images = item.Продуктам.Сплит('|');
foreach(var img in images)
{
// Сделайте что-нибудь со своими изображениями здесь.
}
}
Это то, что вы искали?
Однако я бы не советовал этого делать. Хранение нескольких изображений в одной строке указывает на необходимость корректировки схемы. Что-то вроде
Объявить таблицу @Customer (
Идентификатор ИНТ нуль,
Идентификатор_задачи ИНТ нуль,
)
Объявить @изображений таблице (
Идентификатор ИНТ нуль,
CustomerId INT NOT NULL,
ImagePath varchar(255) NULL
);
Таким образом, вы можете иметь 1 одно изображение на строку в вашей таблице @Images с большим количеством различных изображений, которые ссылаются на 1 клиента. Отношение 1 ко многим.
tahirraza21
Оооо да отношение 1 ко многим точно, что я понимаю :
Клиент(CusID, базовая информация )
Задача (TaskID,CusID, Detail)
Картинки (ImgID,мышипуть_образаи Идентификатор_задачи)
Вы хотите, чтобы я пошел с этой схемой?
David_Wimbley
Эй, тахирраза21, я полагаю, твои коллеги с ОП?
Во всяком случае, да, если ваша ссылка идет от задачи к изображению, то исправьте свой внешний ключ здесь TaskId.
Это был бы лучший способ решить вашу проблему, как я ее понимаю. Но также делайте то, что соответствует вашим потребностям. Если это делается с нуля,и Вы тоже можете это сделать, то нормализация вашей БД - лучший путь. Если вы застряли и должны сделать это в одном столбце, то то, что я упоминал выше с разделением строки, является одним из вариантов сделать то, что вам нужно.
tahirraza21
Хорошо, если я пойду с этой схемой, то могу ли я сохранить несколько путей изображения в разных строках одним щелчком мыши?
Я не понял, о чем ты спросил?
- Эй, тахирраза21, я полагаю, твои коллеги с ОП?"
David_Wimbley
Я просто сказал, что разговаривал с членом 9468137, оригинальным плакатом этого вопроса, а потом вы появились. Я просто подумал, что вы могли бы работать вместе.
Но чтобы ответить на ваш вопрос, да. Если вы используете эту схему, вы можете загрузить несколько файлов и сохранить их в один клик.
Код psuedo для этого будет выглядеть примерно так
var task = новая задача();
_repo.Сохранить(задача);
// Получить идентификатор задачи для привязки ко всем загружаемым файлам/изображениям
ВАР идентификатор_задачи = задача.Идентификатор;
foreach(var file in files)
{
var img = новое изображение();
НВФ.Идентификатор_задачи = идентификатор_задачи;
НВФ.Путь = файл.Путь;
_repo.Сохранить(рис);
}
Затем, чтобы запросить ваши изображения, используя эту схему, вы бы сделали это.
Выберите * из задач в качестве
Присоединяйтесь изображений А Б О Б. Идентификатор_задачи = А. Идентификатор_задачи
Таким образом, вы получите дубликаты элементов задачи из-за отношения "один ко многим" между задачей и изображениями.
Пример: если задача 1 имеет 3 изображения, она будет отображаться 3 раза в этом запросе, но на самом деле она отображается 3 раза из-за того, что к ней привязаны 3 изображения.
tahirraza21
Я тот же самый человек, который обновил свой профиль.похоже, сработает и гораздо более понятный сценарий.
Thanx David я собираюсь попробовать это
David_Wimbley
Ну ладно, звучит неплохо. Пожалуйста. Не стесняйтесь писать мне по адресу dwimbley at outlook.com. Замените at на @. Я буду счастлив помочь вам, как только смогу.
tahirraza21
Это круто ... еще раз спасибо Дэвид :)