2012-01-16 8 views
5

私はasp.net Webフォームを多用してきましたが、これは初めてのASP.Net MVCアプリケーションです。私がしたいのは、子ビューを使用して、ページとは独立して(相対的に)表示および操作されるコントロールをレンダリングすることです。asp.net mvc child actions

たとえば、私は、日付がクリックされるたびにイベントのリストを表示するためにサーバー側ロジックを使用するカレンダー "ガジェット"を持っており、残りのページの処理とは完全に独立しています。

Webフォームでは、ASCX(Webユーザーコントロール)を作成することができます。コントロール内の日付がクリックされると、ページ全体がポストバックされますが、カレンダーコントロールの中にクリック処理を置くことができます。ページの残りの部分は、カレンダーコントロールのポストバックを処理する特定のロジックを入れずに自動的にラウンドトリップされます。

MVCを使用すると、「クリックされた日付」アクションがカレンダーコントローラにルーティングされた場合、埋め込まれているページは認識されないため、残りのページではなくカレンダーだけを描画できます。私が考えることができる唯一の回避策(Ajaxを除く)は、ページ全体のビューをレンダリングする前に、所有ページのコントローラがすべてのカレンダークリックアクションを処理し、カレンダーコントローラに渡すようにすることです。

うまくいけば明らかです。

答えて

3

部分ビューとレンダリングをご覧ください。ここで

はあなたがメインページ内のカレンダーを表示するためにはiframeを使用することができ

http://rachelappel.com/razor/partial-views-in-asp-net-mvc-3-w-the-razor-view-engine/

http://haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx

http://devlicio.us/blogs/derik_whittaker/archive/2008/11/24/renderpartial-vs-renderaction.aspx

+1

はい、これです。また、マスターページのようにレイアウトを再利用する必要がある場合は、テンプレートを構築してみてください。基本的には同じことです。 –

+0

応答をありがとう、私はURLを見てもう少し読んだが、私にはまだ何かが欠けている。私は部分的なビューと子のアクションを使用してカレンダーコントロールのビューを最初にレンダリングする方法を理解していますが、カレンダーの日付をクリックするとどうなりますか?このクリックアクションはおそらくカレンダーコントローラに送信されるはずです(その日付のアイテムを取得できる)が、カレンダーコントローラは残りのページをレンダリングできません。子ビューのすべての例では、 "ポストバック"コントロールではなく、静的コンテンツまたはナビゲーションリンクのみが生成されます – Andy

+0

このページのカレンダー部分を更新するには、ajaxを使用する必要があります。 –

-8

を始めるためにいくつかのURLです。メインページのURLはhttp://example.com/main、iframeのURLはhttp://example.com/calendar/todayです。リンクのtarget属性を設定すると、iframe内のリンクがiframeだけをリロードしたり、メインページをリロードすることができます。同様に、メインページのリンクはiframeをターゲットにすることができます。

メインページとiframeの両方がサーバーから送信されるため、ドメイン間の問題は発生しませんので、必要なスクリプトを作成できます。