Как проверить, что файл не содержит результатов в представлении mvc

У меня есть метод контроллера, как показано ниже, чтобы отправить изображение в представление MVC для отображения

public FileResult ShowImage(GuidID)

{

DataServiceClient client = new DataServiceClient ();

 AdviserImage result;

result = client.GetAdviserImage(ID);


return File(result.Image, "image/jpg"  );

}

на мой взгляд, я использую

<img src="<%= Url.Action("ShowImage", "Adviser", new { ID = Model.AdviserID }) %>" alt="<%:Model.LicenceNumber %>" />

отобразить изображение

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

2 ответа

Решение

Вам понадобится другое отдельное действие контроллера, которое проверяет хранилище данных и возвращает ContentResult который будет либо true или же false (или какую-то другую строку, которую вы хотите указать, имеет ли идентификатор байты или нет), а затем в представлении вам понадобится следующее:

if(@Html.Action("action", "controller").ToString().Equals("true", StringComparison.OrdinalIgnoreCase)){
// render image tag with the call to the other action that returns FileResult
}

Другой вариант заключается в том, что у вас есть модель представления, которая содержит ссылку на байты изображения. Таким образом, вы подготавливаете модель для представления (родительской модели) в контроллере и извлекаете туда байты для изображения, а затем в представлении вы получите:

if(Model.ImageBytes.Length() > 0) {
... do something
}

с ImageBytes свойство типа byte[]

Например, это фрагмент из одного из моих просмотров:

@model pending.Models.Section
@if (Model != null && Model.Image != null && Model.Image.ImageBytes.Count() > 0)
{
    <a href="@Model.Url" rel="@Model.Rel">
        <img title="@Model.Title" alt="@Model.Title" src="@Url.Action(MVC.Section.Actions.Image(Model.Id))" /></a>
}

НТН

Почему бы не проверить нулевое значение в вашем контроллере и не показывать логику:

result = client.GetAdviserImage(ID);
if (result == null)
{
    result = AdviserImage.Missing;
}

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

public static string AdviserImage(this HtmlHelper helper, AdviserImage image, int id, int lic)
{
    if (image != null)
    {
        string url = string.Format("/Adviser/ShowImage/{0}", id);
        string html = string.Format("<img src=\"{0}\" alt=\"{1}\" />", url, image.lic);
        return html;
    }
    return string.Empty; // or other suitable html element
}
Другие вопросы по тегам