2009-11-07 4 views
5

これは基本的な質問ですが、申し訳ありません。私はページフレームワークからASP.NET MVCへの精神的な移行に問題があります。ASP.NET MVCのユーザーコントロールのカプセル化

ページフレームワークでは、ASCXファイルを使用して、カプセル化された小さなチャンクを作成し、サイト全体のさまざまな場所で使用することがよくあります。ページを作成していて、これらのコントロールの1つが必要な場合は、参照を追加するだけですべてが機能します。

私が知る限り、MVCでは、ASCXファイルは部分的にビューです。これは、これらの機能単位のいずれかを追加したい場合は、コントローラのアクションメソッドにいくつかのコードを追加して、関連するViewDataをASCXで使用できることを確認する必要があることを意味しますか?

これが当てはまる場合、それは私にとっては少し後退しているようです。たとえば、マスターページを使用するビューを持つすべてのコントローラにコードを追加しなくても、コントロールをマスターページにドロップするだけで済むわけではありません。

私は何かが不足していると思われます - どんな助けもありがたいです。

おかげで、 - クリス

私の知る限り
+0

このブログを読んでいるすべての読者がasp.netまたはmvcの専門家であることは間違っているため、申し訳ありません。 –

+0

あなたの質問文法のための+1あなたは自分の質問を編集してから私の質問に編集します私は英語で良い知識を持っていません –

答えて

3

は、MVCで、ASCX ファイルは単なる部分図です。この は、私は機能のこれらのユニットの1 を追加したいところはどこでも、私はまた、関連のViewDataがASCXに利用できる ある を確認するために コントローラのアクションメソッドにコードを追加する必要が ことを意味していますか?

はい。

しかし、あなたはあなたのビューの代わりに、RenderPartialRenderActionメソッドを使用することができ、かつ(サブビューに渡されるデータを含む)をお使いのすべての機能をカプセル化します。

つまり、コントローラメソッド、ビューデータ、およびパーシャルビューを組み込んだ小さなパッケージが作成されます。これはメインビューから1行のコードで呼び出すことができます。

+0

優秀 - RenderActionは私が行方不明だったパズルの一部です!どうもありがとう! –

+0

また、いくつかの代替案については、この投稿をhttp://blog.codeville.net/2008/10/14/partial-requests-in-aspnet-mvc/でご覧ください。 – joshperry

+0

RenderActionの概要を以下に示します。http://blogs.intesoft.net/post/2009/02/renderaction-versus-renderpartial-aspnet-mvc.aspx –

1

部分ビューをレンダリングし、モデルオブジェクトを渡すことができます。あなたの部分図(た.ascx)ファイルで

<% Html.RenderPartial("MyPartial", ViewData["SomeObject"]); 

、あなたはそのオブジェクトにあなたがする必要が何でもする(あなたは、@コントロール減速に適切なオブジェクトを継承しましたと仮定して)「モデル」オブジェクトを使用することができます。

あなたは、通過してモデルを作成せずに、部分的なビューのテキストを取り出して、その場所に配置することができます。

メインビュー(.aspxファイル)では、部分ビューに渡すViewDataに適切なオブジェクトを定義する必要があります。

あなたがすることができるもう一つの方法は、使用している:

<% Html.RenderAction("MyAction", "MyController", new { Parameter1="Value1"}) %> 

何以前の方法がないことは、コントローラのアクションを呼び出すその応答を取り、あなたが「RenderAction()」メソッドを呼び出したところに配置しています。コントローラアクションに対する要求を実行し、応答を読み込むのと同じですが、応答を別のファイルに配置する点が異なります。

Googleの「レンダリングとレンダリング」にはいくつかの情報があります。

+0

Excellent - RenderActionは、私が逃したパズルの一部です!どうもありがとう! –

2

あなたの質問はすでに回答済みですが、完全性のために、時には魅力的かもしれない別のオプションがあります。

「コントロール」がASP.NET MVCでどのようにマスクされているのを見たことがありますか?それらは "HtmlHelper"のメソッドです。

<%= Html.Textbox("FirstName") %> 

をそして、あなたは多く標準コントロールのためにそのようなものを持っている:あなたは「姓」にバインドされたテキストボックスが必要な場合、たとえば、あなたが行うことができます。

あなたができることは、そのような独自の方法を作成することです。独自のメソッドを作成するには、このように、HtmlHelperのクラスに拡張メソッドを作成する必要があります。

public static class HtmlHelperExtensions 
{ 
    public static string Bold(this HtmlHelper html, string text) 
    { 
     return "<b>" + text + "</b>\n"; 
    } 
} 

を次に、あなたのビューでは、このクラスの定義を含む名前空間を開いた後、あなたはこのようにそれを使用することができます:

<%= Html.Bold("This text will be in bold-face!") %> 

これは特に有用ではありません。しかし、あなたは非常に興味深いことをすることができます。私が頻繁に使用するのは、列挙を受け取り、この列挙体の値を持つドロップダウンリスト(例:enum Gender { Male, Female }、ビュー内ではGender: <%= Html.EnumDropDown(Model.Gender) %>など)を作成するメソッドです。

幸運を祈る!

関連する問題