6

コントローラーがモデルに基づいてビューをレンダリングする場合、インデクサー (つまり、ViewData["Property"]) を使用して ViewData コレクションからプロパティを取得できます。ただし、次を使用して呼び出そうとした共有ユーザー コントロールがあります。

return View("Message", new { DisplayMessage = "This is a test" });

そして私のメッセージコントロールにはこれがありました:

<%= ViewData["DisplayMessage"] %>

これで DisplayMessage が正しくレンダリングされると思いますが、null が返されます。いろいろいじくり回した後、ユーザー コントロールを厳密に型指定するために、最終的に「MessageData」クラスを作成しました。

public class MessageControl : ViewUserControl<MessageData>

そして今、この呼び出しは機能します:

return View("Message", new MessageData() { DisplayMessage = "This is a test" });

次のように表示できます。

<%= ViewData.Model.DisplayMessage %>

ユーザー コントロールを厳密に型指定せずに、DisplayMessage プロパティを ViewData (つまり、ViewData["DisplayMessage"]) コレクションに追加しないのはなぜですか? これは設計によるものですか?ViewData に「DisplayMessage」のキーが含まれているのは理にかなっているでしょうか?

4

2 に答える 2

6

方法

ViewData.Eval("DisplayMessage") 

あなたのために働くはずです。

于 2008-08-28T06:41:08.170 に答える
2

もちろん、この質問を作成した後、Googleでさらに数回検索するとすぐに答えが見つかります

http://forums.asp.net/t/1197059.aspx

どうやらこれはラッパークラスが原因で発生します。それでも、渡されたプロパティはデフォルトで ViewData コレクションに追加されるようです。

私は本当に自分の質問に答えるのをやめる必要があります:(

于 2008-08-20T21:03:10.070 に答える