Как отобразить динамическое имя изображения с помощью Razor - PullRequest
6 голосов
/ 12 мая 2011

Я довольно новичок в MVC и недавно начал проект Asp.Net MVC3, используя движок Razor.

В настоящее время у меня возникают проблемы с выводом имени изображения в тег html img с помощью Razor.

Допустим, в моей модели есть класс Car со строковым свойством с именем ModelName. У меня также есть папка с изображениями модели автомобиля, они названы в честь модели автомобиля, так что я могу условно показать изображение конкретной модели, просто используя название.

Из моего контроллера я передаю коллекцию автомобилей на мой взгляд и делаю следующее, чтобы показать список изображений моделей автомобилей:

@foreach (var item in Model) {
<img src='@item.ModelName.png' />
}

Однако, если я пытаюсь запустить это, я получаю ошибку:

Сообщение об ошибке компилятора: CS1061: «строка» не содержит определения для «png» и без метода расширения «png» принимает первый аргумент тип 'строка' может быть найден (вы отсутствует директива использования или ссылка на сборку?)

Я тоже пытался

    @foreach (var item in Model) {
     <img src='@{item.ModelName}.png' />
    }

Но это приводит к:

Сообщение об ошибке компилятора: CS1528: ожидается; или = (невозможно указать аргументы конструктора в> объявлении) Ошибка источника:

Строка 84: #line default Строка 85: # линия скрытая линия 86: WriteLiteral (". Png \ ' "> \ Г \ п"); Строка 88:

Я могу обойти это, выполнив:

@foreach (var item in Model) {
     string imageName = string.Format("{0}.png", item.ModelName);
     <img src='@imageName' />
    }

Но это кажется довольно неуклюжим, наверняка должен быть лучший способ ??

Ответы [ 2 ]

20 голосов
/ 12 мая 2011

Вы также можете сделать:

@foreach (var item in Model) 
{
    <img src="@(item.ModelName).png" />
}

Или сделать помощника:

public static MVCHtmlString Image<T>(this HtmlHelper helper, string name)
{
    TagBuilder img=new TagBuilder("img");
    img.Attributes.Add("src", name+".png");
    return new MvcHtmlString(img.ToString());
}

и используйте его как:

@foreach (var item in Model) 
{
    @Html.Image(item.ModelName)
}
2 голосов
/ 11 августа 2014
@foreach (var item in Model._imageList)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.FriendlyName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.CreateDate)
        </td>
        <td>
             <img src="@Url.Content(item.ImagePath)" alt="Image" />
        </td>
        <td>
            @Html.ActionLink("Edit", "UploadImageEdit", new { id = item.ImageID }) |
            @Html.ActionLink("Details", "UploadImageDetails", new { id = item.ImageID }) |
            @Html.ActionLink("Delete", "UploadImageDelete", new { id = item.ImageID })
        </td>
    </tr>
}

При этом отобразится изображение, сохраненное в файловой системе, но путь к файлу сохраняется в базе данных при использовании цикла foreach.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...