質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.75%

  • C#

    6549questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • ASP.NET

    480questions

    ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

  • ASP.NET MVC 4

    59questions

    ASP.NET MVC4は、MVCパターンを利用して、高度なテスト機能と保守機能を備えた Web アプリケーションを開発するためのフレームワークです。

ASP.NET MVCのWebApplicationで、項目が空のときに-を表示したいです。

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 162

sol2018

score 3

 前提・実現したいこと

ASP.NET MVCのWebApplicationで、項目が空のときに-を表示したいです。

 該当のソースコード

<td> @Html.DisplayFor(m => m.userid) </td>
<td> @Html.DisplayFor(m => m.username) </td>


C# null演算子 @Html.DisplayForで探して

<td> @Html.DisplayFor(m => m.userid) </td>
<td> @Html.DisplayFor(m => m.username ?? "-") </td>


としてみました。

 発生している問題・エラーメッセージ

System.InvalidOperationException: 'テンプレートは、フィールドへのアクセス、プロパティへのアクセス、1 次元配列のインデックス、または単一パラメーターのカスタム インデクサー式でのみ使用できます。'


とエラーです。

@if (string.IsNullOrEmpty(Model.store_st_name)){
    <td>-</td>
}
else{
    <td> @Html.DisplayFor(m => m.username) </td>
}


よろしくお願いします。

 補足情報(FW/ツールのバージョンなど)

Windows7 Pro
Visual Studio 2017 Professional 15.6.7

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • SurferOnWww

    2018/06/13 11:12 編集

    質問する際は、とにかくまずあなたの開発環境(OS, .NET, IIS, MVC, Visual Studio のバージョン、テンプレートは何を使ったか、対象ブラウザは何かなど)を書いてください。

    キャンセル

  • SurferOnWww

    2018/06/13 11:23

    あと、Controller のコードも書いてください。Linq to Entities などで Model のデータを取得しているなら、そちらで対応する方が簡単だと思いますので。

    キャンセル

  • SurferOnWww

    2018/06/13 15:56

    前のスレッドでは Core でしたよね。今回もそうですか? もしそうであれば、それも質問者さんが提供すべき重要な情報の一つだと思うのですが・・・

    キャンセル

回答 1

checkベストアンサー

0

コメントに対する答えが返ってきませんが、自分的にお勧めの Controller で処理する方法を書いておきます。

MiddleName のところに注目してください。

public class CustomerName
{
    public string Title { get; set; }
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }
}


public ActionResult Customer(int id = 1)
{
    AdventureWorksLTEntities db = new AdventureWorksLTEntities();
    var item = (from c in db.Customer
                where c.CustomerID == id
                select new CustomerName
                {
                    Title = c.Title,
                    FirstName = c.FirstName,
                    MiddleName = string.IsNullOrEmpty(c.MiddleName) ? "-" : c.MiddleName,
                    LastName = c.LastName
                }).FirstOrDefault();

    return View(item);
}

AdventureWorksLTEntities というのは Microsoft が提供するサンプルデーターベース AdventureWorksLT を元に EF 6.1.3 で作ったコンテキストクラスです。

環境は Visual Studio Community 2015, .NET 4.6.1 (Core ではない) の MVC テンプレート, Winsows 10 Pro 64-bit, IIS Express 64-bit です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/15 17:19

    ありがとうございます。

    OS->記載済み
    .NET->あまりこだわっていないが4.5とか。
    IIS->あまりこだわっていない。最新。
    MVC->あまりこだわっていない。最新。
    Visual Studio のバージョン->記載済み
    テンプレートは何を使ったか->付属の。
    対象ブラウザは何か->あまりこだわっていない。<td>タグくらいならどれでもできると思いました。IE。

    Controller のコードも書いてください。->Viewで行うのかと思いました。

    前のスレッドでは Core でしたよね。今回もそうですか?->いいえ。なのでCoreを抜きました。

    キャンセル

  • 2018/06/15 18:00 編集

    > あまりこだわっていない。

    質問者さんのこだわりを聞いているのではないのです。「こだわり」は回答者・閲覧者にとってどうでもいいことです。なぜ、.NET のバージョンなどの情報が必要かと言うと、バージョンによって提供されている機能に違いがあって、答えが変わってくることがあるからです。そこを押さえておかないと、回答が的外れになって、いつまでたっても解決にならず、混乱を招くだけということもあるのです。

    テンプレートについても「空」と「MVC」では大違いです。「MVC」ならそのバージョンでの機能がフルに実装されたプロジェクトが生成されますが、「空」には何も実装されていません。そこも質問者さんが提供すべき情報としては非常に重要です。

    興味本位で聞いているわけではなく、質問者さんの課題に対し、できるだけ的を得た回答をするために必要な情報を聞いているのだと認識してください。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.75%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C#

    6549questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • ASP.NET

    480questions

    ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

  • ASP.NET MVC 4

    59questions

    ASP.NET MVC4は、MVCパターンを利用して、高度なテスト機能と保守機能を備えた Web アプリケーションを開発するためのフレームワークです。