2010-11-21 10 views
0

したがって、私はActionLink HTMLヘルパーとほとんどのパラメーターの使用を理解しています。私は、オブジェクトのrouteValuesパラメータの使用範囲全体を頭で囲んでいます。Html.ActionLinkヘルパーに関する質問 - 具体的にはオブジェクトのrouteValuesパラメーターの構文

しかし、私の質問は、routeValuesはあなたがViewDataを辞書から既存のオブジェクトのいずれかのようなオブジェクトを指定することができ、パラメータのためのようだということです。

Html.ActionLink("Some Text", "Edit", Model.ProductId); 

か、構文初期化オブジェクトを使用することができます。

Html.ActionLink("Some Text", "Edit", new { Model.ProductId }); 

私の2つの質問は、

です。A)別のものを使用する理由は何ですか?私はモデルに正しい値を持つプロパティを既に持っているので、なぜ新しいものを初期化しなければならないのかを理解するのが難しいです。

B)新しいオブジェクト(var someVar = new SomeObject())をインスタンス化することは分かりますが、上記の例では何を定義していますか(new {Model.ProductID})、プロパティを指定していますか?

おかげで、

答えて

0

のようなものです両方とも間違っています。 RouteValueDictionary(通常は匿名オブジェクト)ではないオブジェクトを指定すると、オブジェクトのプロパティに対するリフレクションを使用して、プロパティ/値のペアをディクショナリに転送します。いずれの場合も、関連する値を持つidキーを含むRouteValueDictionaryに変換されるオブジェクトは使用されません。 2番目のケースでは、 私はあなたが法定構文 を持っているとは思わないが、デフォルトルートが与えられているidパラメータに正しくマップされません。あなたがしたい構文は次のとおりです。

Html.ActionLink("Some Text", "Edit", new { id = Model.ProductId }); 

あなたは値Model.ProductIdあるidプロパティを持つ匿名オブジェクトを作成しています。これにより、Model.ProductIdの値にマップされるidキーを持つRouteValueDictionaryが生成されます。

+0

THanks for explanation - それは匿名のオブジェクトです。はい、2つ目は合法的です(A以降)。B)Steve Sandersonからまっすぐです。 – pghtech

+0

@phgtech - それは 'id'パラメータをもたらさないでしょう、それは正しいかもしれないが、MVCのルーティングのための典型的でない' ProductId'パラメータをもたらします。 – tvanfosson

+0

ああ、説明してくれてありがとう。 MVC/C#/プログラミングは私にとって初めてのものなので、これは私が気付かなかった貿易の事実の一つです。 – pghtech

0

あなたは、コントローラのアクション

例に他の値を送信することもできます。

Html.ActionLink("Some Text", "Edit", new { id=Model.ProductId, myotherValue=1 }); 

そして、あなたの制御動作は、私の知る限り、この

Public ActionResult Edit(int id, int myotherValue); 
0

B)構文new { id = 1, name = "11" }は、「匿名オブジェクトの作成」を意味します。ビルド中のプロセスコンパイラはすべて、このような使用方法を発見し、このようなあなたのアセンブリで読めない名前を持つクラスを作成します:

 
class AnonymousType`1 
{ 
    int id {get; private set}; 
    int name {get; private set}; 
} 

、すべての参照は、それがどのように動作するかの単なる説明である new <>AnonymousType`1{ id = 1, name = "11" }次のようなコードに変わり、コードを生成しましたもう少し複雑です。

A)だから、Model.ProductIdがintで、new { Model.ProductId }は、コンパイラによって生成された、いくつかの型のインスタンスであることを、ご覧ください。

これはReflectorを使って調べることができます。さらに詳しい情報Anonymous Types

関連する問題