我有一个控制器方法,如下所示发送图像到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
,这将是true
或false
(或其他一些字符串,您想要告诉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
}