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

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

新規登録して質問してみよう
ただいま回答率
85.50%
ASP.NET

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

Q&A

解決済

1回答

5758閲覧

ASP.NET MVCでViewの変数はなぜ小文字と大文字が混在するのか?

cancat

総合スコア313

ASP.NET

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

0グッド

0クリップ

投稿2017/05/18 01:41

こんにちは。
Windows10でASP.NETのアプリケーションを開発しています。
Visual Studio 2017 Communityを使っています。

###前提・実現したいこと
Viewの変数を理解したいです。

###試したこと
Visual StudioでCodeFirstでテーブルを作り、ScaffoldingでEdit.cshtmlを作りました。

###発生している疑問点
1行目で「model」を定義しています。(たぶん)。
emailの表示を、
email表示(改)のようにすると、@model.emailでなく@Model.emailとmodelを大文字で書き始める必要があります。

Q1)この@Modelはどこから現れたのでしょうか?
Q2).cshtmlでは、modelとModelは同じになる?
Q3)そもそも1行目は変数定義と考えてよい?
Q4)modelとModelは違うもの?
Q5)modelとModelは違うものだとしたらなぜ同じ値が入っている?

C#

11行目 2@model ConnectionList.Models.Person 3 4email表示 5@Html.ValidationMessageFor(model => model.email, "", new { @class = "text-danger" }) 6 7email表示() 8<input type="text" value="@Model.email" />

###該当のソースコード

C#

1@model ConnectionList.Models.Person 2 3@{ 4 ViewBag.Title = "Edit"; 5} 6 7<h2>Edit</h2> 8 9 10@using (Html.BeginForm()) 11{ 12 @Html.AntiForgeryToken() 13 14 <div class="form-horizontal"> 15 <h4>Person</h4> 16 <hr /> 17 @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 18 @Html.HiddenFor(model => model.Id) 19 20 <div class="form-group"> 21 @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" }) 22 <div class="col-md-10"> 23 @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } }) 24 @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" }) 25 </div> 26 </div> 27 28 <div class="form-group"> 29 @Html.LabelFor(model => model.email, htmlAttributes: new { @class = "control-label col-md-2" }) 30 <div class="col-md-10"> 31 @Html.EditorFor(model => model.email, new { htmlAttributes = new { @class = "form-control" } }) 32 @Html.ValidationMessageFor(model => model.email, "", new { @class = "text-danger" }) 33 </div> 34 </div> 35 36 <div class="form-group"> 37 @Html.LabelFor(model => model.email, htmlAttributes: new { @class = "control-label col-md-2" }) 38 <div class="col-md-10"> 39 <input type="text" value="@Model.email" /> 40 </div> 41 </div> 42 43 <div class="form-group"> 44 <div class="col-md-offset-2 col-md-10"> 45 <input type="submit" value="Save" class="btn btn-default" /> 46 </div> 47 </div> 48 </div> 49}

###補足情報(言語/FW/ツール等のバージョンなど)
Microsoft Visual Studio Community 2017
Version 15.0.26228.9 D15RTWSVC
Microsoft .NET Framework
Version 4.6.01586

です。
よろしくお願いします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

1行目の
@model
は@modelディレクティブでそのビューに紐付ける型付けされたモデルを定義する構文。

@Model.email
はそのビュー(WebViewPage<TModel>クラス)のModelプロパティを参照しているだけ。
「@」はRazor構文を今から書きますよという決まりごと。

つまり、Modelプロパティの型は@modelディレクティブで宣言した型になるということ。

投稿2017/05/18 02:36

編集2017/05/18 02:55
workaholist

総合スコア559

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

cancat

2017/05/18 05:38

つまり変数はModelということですか?
workaholist

2017/05/18 05:57

@Modelって書いているからわかりにくいんですかね? ビューにはRazor記法で @(Model.email == "test@xxx.com" ? "○" : "×") とか @if (Model.email == "test@xxx.com" { ... } とかも書けますよ。
cancat

2017/05/18 06:17

なるほど。 Modeの定義はどこにあるのでしょう?
cancat

2017/05/22 00:40

ありがとうございます。プロパティはわかりました。 @modelはディレクティブとのことですが、ディレクティブとは、この場合は、単に「型」という理解でOKでしょうか?
cancat

2017/05/22 01:07

ディレクティブとは、この場合は、単に「型」という理解でOKでしょうか? の質問は、 https://codezine.jp/article/detail/5549 を事前に読んで出てきた疑問です。 なので、このURLを示されても答えになってないです。
workaholist

2017/05/22 01:36

提示URLには@modelディレクティブの説明が書いてありますが、 そうではないということであれば何でしょうか? 「ディレクティブ」という言葉の意味でしょうか? 「ディレクティブ」=「型」という意味ではありません。
cancat

2017/05/22 02:31

この文脈での「ディレクティブ」という言葉の意味です。
workaholist

2017/05/22 02:39

「@modelディレクティブ」ではなくて「ディレクティブ」の意味ですね? 私の感覚的な解釈では「コンパイラへの指示」みたいな感じでしょうか。 申し訳ありませんが、知識不足なためこれ以上の説明は私にはできません。
cancat

2017/05/22 07:04

この文脈での、ということで、単純な「ディレクティブ」ではなく、「@modelディレクティブ」のほうを知りたいです。 正確かどうかは別として、この場合わたしは「型」と理解してよさそうだ、と思っています。 違うとおっしゃるので、質問しています。
workaholist

2017/05/22 07:10

「@modelディレクティブ」については https://codezine.jp/article/detail/5549 に書いてありますがいかがでしょうか。 「@modellディレクティブはビューファイルから強く型付けされたモデルを参照する」 「ビューファイル内で強く型付けされたモデルクラスを使用することを示すため」 と書いてありますが、これ以上の説明は私にはできませんのでご容赦ください。
cancat

2017/05/22 07:48

ありがとうございます。 そこを読んでわからなかったんですよねー。 「@modellディレクティブはビューファイルから強く型付けされたモデルを参照する」 のなら、 「@modellディレクティブはビューファイルから強く型付けされたモデルを参照する」型のようなもの、 と理解してよいと個人的には思っていて、それは違う、といわれて混乱している状態です。
koutajero

2017/05/23 08:37

workaholistさんも記述されていますが、 >「ビューファイル内で強く型付けされたモデルクラスを使用することを示すため」 viewメソッド経由でモデルの受け渡しの場合、ビュースクリプトでは、 @modelディレクティブでその型を<使用できるように宣言>しているので、型という概念ではないんじゃないでしょうか。
cancat

2017/05/23 10:45 編集

koutajeroさん、こんにちは。 型ではないんですか…。とすると@modelディレクティブって、なんなんでしょう? やっぱり理解できてないです…。
workaholist

2017/05/23 10:56

「@modelディレクティブに指定されたクラスがModelプロパティの型になる」=「@modelディレクティブは型」という意味であればそれでイイんじゃないですか。 別に開発するだけならどうでもいいことですしね。
cancat

2017/05/26 04:35

ほんとですか。 それは違うとか、あとでいうのなしでいいですか? わたしも開発するのにはほとんど必要ないとは思いますが、また質問するときに(きっとある)そういって意思疎通できないほど外れている的外れな考えだと、ますます混乱しちゃうだろうから、正確に理解できることは正確に理解したいですけれど。
workaholist

2017/05/26 04:42

あとでいうのなしでいいです!
cancat

2017/05/26 04:54

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問