2009-06-18 5 views
5

まずは、私のビュー内のサーバー側のコントロールにアクセスすることは、MVCでぶつかることを知っていることを述べておきます。しかし、私は自分の状況で(私が見る限り)必要があります。ここに私の話があります。 :)MVCプロジェクトのコードビハインドでサーバーサイドコントロールにアクセスするにはどうすればよいですか?

私は自分のWebアプリケーションで使用しているサードパーティコントロールを持っています。私は現在、WebFormsソリューションをMVCに移植する作業を行っています。この特定のサードパーティのWebコントロールにはWebFormsアーキテクチャが必要なので、私はWebFormsプロジェクトから同じコードを使用することを検討しています。

私のinitial approachは、2つのWebサイト(WebFormsサイトとMVCサイト)を持ち、MVC側からiFramesを使用して2つのWebサイトをリンクすることでした。それがうまくいくことはわかっていますが、この特定のコントロールを使用することはちょっと残念です。より多くの研究をした後、私は "男の子を混ぜる"ことができ、MVCプロジェクト内でWebFormsアーキテクチャを使用することができる私はdiscoveredです。したがって、私が取った新しいアプローチは、特定のディレクトリ(つまり、 'View \ SomeDir \ WebForms')にこのサードパーティのコントロールを使用するページ上でをコピーしてから、そのディレクトリをglobal.asaxで無視することになります()ファイルMVCルーティングシステムはそれを拾うしないように:私は私のMVCプロジェクトにASPXページを上書きコピーする場合残念ながら、私は分離コードは私に私のコントロールへのアクセスを許可しないことを

routes.IgnoreRoute("View\SomeDir\WebForms\{*pathInfo}"); 

を発見しましたページ。ここでは、物事が設定されている方法です。

<%@ Register 
    Assembly="..." 
    Namespace="..." 
    TagPrefix="custom" %> 

<custom:SomeControl ID="customControl" runat="server" /> 

ここに私のコードの後ろに次のようになります。私は私の分離コード内のすべてのコントロールにこのエラーが出ますので、残念ながら私のプロジェクトでもコンパイルされません

public class MyPage : Page 
{ 
    protected void Page_Load(object sender, EventArgs args) 
    { 
    Debug.WriteLine(customControl.ID); // <-- COMPILE ERROR: Cannot resolve symbol 'customControl' 
    } 
} 

。他のコントロール(ラベル、パネル、テキストボックスなど)をクライアントタグに変換するのは問題ではありませんが、私はこのカスタムコントロールへのアクセスが必要です。 )イベントを処理し、それに応じて応答する。基本的なWebフォームのもの...

私は可能なことをしようとしていますか?私が考えているもう1つのアプローチは、コントローラークラスのサーバーサイドイベントを初期化してトラップすることです。しかし、私はビュー内でコントロールの状態をシリアル化することを避けたいと思います。コントローラに渡し、可能であれば戻します。

アドバイスを事前にいただきありがとうございます!

答えて

5

私はこれを投稿してから10分後に解決策を見つけました。

私のプロジェクトを右クリックし、「Webアプリケーションに変換」と言って、CodeBehindクラスを「部分的」に戻してください。すべてのコントロールは、コードの背後にあるコードでアクセスできるようになりました。

読んでいただきありがとうございます。私の質問/回答は誰か他の誰かに役立つことを願っています。 :)

0

伝統的なWebFormsの半分を維持するために、何かをMVCに移植するという点はありません。

このアプローチは、将来の開発者が両方のテクノロジに精通している必要があり、私の意見ではクリーンではないことを意味します。

私はどちらかと一緒に行き、2つを混ぜるのを避けようとします。

+0

私が使用しているコントロールはSilverlightバージョンで動作していますが、今はいつかMVCに移植したいと思っていました。この特定のコントロールの機能を呈した小さなサイトが始まったのは間もなく本格的なWebポータルとMVCが我々に移行することを決めました... – Luc

+0

レガシーアプリケーション全体を最新のテクノロジーに変換することはできませんし、より反復的なアプローチが必要な場合もあります。 – Stumblor

関連する問題