まずは、私のビュー内のサーバー側のコントロールにアクセスすることは、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つのアプローチは、コントローラークラスのサーバーサイドイベントを初期化してトラップすることです。しかし、私はビュー内でコントロールの状態をシリアル化することを避けたいと思います。コントローラに渡し、可能であれば戻します。
アドバイスを事前にいただきありがとうございます!
私が使用しているコントロールはSilverlightバージョンで動作していますが、今はいつかMVCに移植したいと思っていました。この特定のコントロールの機能を呈した小さなサイトが始まったのは間もなく本格的なWebポータルとMVCが我々に移行することを決めました... – Luc
レガシーアプリケーション全体を最新のテクノロジーに変換することはできませんし、より反復的なアプローチが必要な場合もあります。 – Stumblor