ASP.NET MVCで開発しています。
型付けHTMLヘルパーが上手く理解(というか納得?)できないので
どうかご教授願います。
ところで、事前にこちらのページを覗いております。
http://www.atmarkit.co.jp/fdotnet/scottgublog/20 …
さて、本題。
<%= Html.TextBoxFor(model => model.ProductName) %>
というのが、
<input type="text" id="ProductName" name="ProductName" value="*model.ProductNameの値*"/>
となるのは何となく理解ができます。
理解できるということの根拠として、id(およびname)の「ProductName」はまさに
記述されていますし、ラムダ式はmodel.ProductNameを返すようになっているから、
「.NETはnameとidとvalueを取得できるんだろうよ」、と予想できるからです。
旧来のHtmlヘルパー
<%= Html.Textbox("ProductName",Model.ProductName) %>
に比べて、
「name(id)属性用のパラメータが必要無い」
「テンプレート内でのコードインテリセンスが効く」
という利点があるそうですが、どうしてもここで納得出来ないことがあります。
この2点の利点を実現するのに、なぜラムダ式で実現できるのでしょうか?
あるいは、なぜラムダ式が採用されたのでしょうか?
別の言い方をすれば、別にラムダ式を用いなくても、.NETが賢くなれば、
<%= Html.Textbox(Model.ProductName) %>
という記述で、インテリセンスが効いてコンパイルチェックも実行されても
おかしく無いと思うのですが・・・。
Modelオブジェクトの型宣言はテンプレートの先頭で行われているはずですから、
「Model.」と打ったところでModelのクラスと関連付いてもおかしく無いですよね?
別にMSの仕様に文句をつけるつもりはないのですが、
「先述の2点の利点を実現する」ことと、「ラムダ式の記述」というのがどうも一致しません。
開発作業には支障ないのですが、腑に落ちなくて困っています。
ソースコードを読んでも、自分の疑問の解決には至りませんでした。
どうぞよろしくお願い致します。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
どうしてそうなってるか、といった仕様とかはわかりませんから、情報だけ。
ASP.NET MVCはソースコードが提供されています。
ASP.NETのコアな部分はでてませんが、HTMLヘルパーのあたりはすべて読めたはず。
そのあたりを参考に独自のヘルパー作ったりしましたから。
ソースコードを読み込んでみれば、どう使っているか、とか理解できることもあるんじゃないですかね。
onos様
ご回答いただきありがとうございます。
ソースコードは一通り読みました。その上で、「○○For」のHTMLヘルパーを使うことの
利点、どんなときにどんな風に使うことで、旧来HTMLヘルパーでは到底なし得なかったことが
実現できるのか?という部分がわからず、質問させていただいた次第です。
No.1
- 回答日時:
ラムダ式はデリゲートなので、実行時にリフレクションで属性情報を取得できます。
一方で、下記のように
<%= Html.Textbox(Model.ProductName) %>
単純な値を渡されても、開発時のインテリセンスは効くかもしれませんが、実行時に呼び出された側からするとそれはただのパラメータ値でしかないので。。。
といったところではないかと思います。
edp3142様
ご回答いただきありがとうございます。
>単純な値を渡されても、開発時のインテリセンスは効くかもしれませんが、
>実行時に呼び出された側からするとそれはただのパラメータ値でしかないので。。。
なるほど。そういう違いが考えられますね。
ただそうなるとまた別の疑問が沸いてきまして・・・。
私としてはHTMLヘルパーはパラメータの値をもらってHTMLを組み立てるだけの存在なので、
モデルオブジェクトの属性って必要ないんじゃないか?・・・、と思うのですが・・・。
たとえば、モデルクラスのアノテーションにしたがって事細かなHTMLなりJavaScriptなりを
生成してくれる・・、とかしてくれるのでしょうか?
しつこく尋ねて申し訳ないのですが、ラムダ式を使った場合でないと得られない利点、
および、そういうサンプルがありましたら、お教え願えませんでしょうか?
宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript Javascript初心者|jQueryの.val()で値を取得し複数の要素を連結させる方法知りたい 2 2022/06/02 12:06
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- JavaScript Javascriptを使ってQRコード読み取り、取得した情報をPOSTしたいと思っています。 1 2023/04/28 15:18
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【jQuery】input nameの文字列...
-
二つの入力欄に、同時に同じ文...
-
動的にTabindexの値を変えたい!
-
jqueryでtextareaのcols、rows...
-
javascriptの値をformのinput h...
-
JavaScriptにて動的に配列を作...
-
cookie使用時にundefinedと表示...
-
テキストボックスの入力をリセット
-
Javascriptでのbuttonのname属...
-
入力フォームに半角スペース以...
-
ASP.NETでNAME属性を固定にしたい
-
Pythonのプログラミングについ...
-
【ASP.NET MVC】HTMLヘルパーに...
-
ファイル選択ダイアログが表示...
-
ラジオボタンでクリックした値...
-
hiddenを動的に作成したい
-
name属性のないformタグの、中...
-
return trueとreturn falseの用...
-
<JavaScript>tableタグを入力不...
-
onchangeイベントを強制的に発...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【jQuery】input nameの文字列...
-
javascriptの値をformのinput h...
-
テキストボックスの入力をリセット
-
ボタンを押すとテキストボック...
-
name属性のないformタグの、中...
-
JavaScriptにて動的に配列を作...
-
二つの入力欄に、同時に同じ文...
-
新しくフォルダを作成したい
-
ラジオボタンでクリックした値...
-
ASP.NETでNAME属性を固定にしたい
-
入力フォームに半角スペース以...
-
テキストボックスの値同士を比...
-
Javascriptでのbuttonのname属...
-
動的にTabindexの値を変えたい!
-
submitボタン押下時にPOSTされ...
-
ふりがな自動入力で姓名を分け...
-
cookie使用時にundefinedと表示...
-
name属性とid属性の違い。DOMの...
-
data.resultからデータを取り出...
-
doPostBack 関数について
おすすめ情報