如何检查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 %>" />

显示图像

但是有些id没有图像并返回null,我想检查文件结果在视图中是否为空,如果为空,则不显示图像

您将需要另一个单独的控制器操作来检查数据存储并返回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>
}

HTH

为什么不在控制器中检查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
}

相关内容

  • 没有找到相关文章

最新更新