1

我有如下控制器方法将图像发送到 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 %>" />

显示图像

但有些 ids 没有图像并返回 null,我想检查文件结果是否为 null with view,如果它的 null 不显示图像。

4

2 回答 2

0

为什么不在您的控制器中检查 null 并将逻辑排除在显示之外:

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
}
于 2011-08-18T22:38:11.743 回答
0

您将需要另一个单独的控制器操作来检查数据存储并返回ContentResult其中一个truefalse(或您想要判断 ID 是否具有字节的其他字符串),然后在视图中您将需要这个:

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>
}

高温高压

于 2011-08-18T22:58:29.010 回答