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 %>" />

画像を表示するには

しかし、いくつかのIDには画像がなく、nullを返します。ファイルの結果がビュー内でnullであることを確認し、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になりますtrueor 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
}

もう 1 つのオプションは、イメージ バイトへの参照を含むビュー モデルを使用することです。そのようにして、コントローラーでビュー (親モデル) のモデルを準備し、そこに画像のバイトをプルすると、ビューで次のようになります。

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

ImageBytesプロパティがタイプであるbyte[]

たとえば、これは私の見解の 1 つからのスニペットです。

@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

于 2011-08-18T22:58:29.010 に答える