ポップアップ ウィンドウを使用するのではなく、ページにjqModalなどのモーダル ウィンドウを使用することをお勧めします。IMO は、ネイティブのポップアップよりも使いやすさが優れています。
あなたのウィジェットについて、モデルの側から問題を見てはどうですか? ウィジェットの場合、表示用とウィジェットの設定の編集用の 2 つのビュー モデルがあります。ウィジェットの表示用と設定の編集用に 2 つの異なるコントローラーを用意することをお勧めします (ここではSRPの原則を適用します)。したがって、最初のコントローラーはウィジェット データ モデルを返し、2 番目のコントローラーは設定データ モデルを返します。ビューは、必要なだけ使用できます。プロジェクトのカスタム実装を考慮せずに、言葉だけを使用してここで何かを推奨することは困難です。
あいまいな質問に答えようとするのは難しい。もう少し具体的な質問をしたほうがよいでしょうか?このウィジェット付きのポータルのサンプルを確認してください。これは、学習と使用が非常に簡単で、非常に強力な ExtJS ライブラリを使用しています。
編集 02/20/10:
私は次のアプローチを使用することを好みます (たとえば、FooWidget という名前のウィジェットを使用します)。FooWidgetDataController と FooWidgetSettingsController という名前の 2 つのコントローラーを作成します。URL のルートを追加します。
/widgets/FooWidget/data for FooWidgetDataController
/widgets/FooWidget/settings for FooWidgetSettingsController
FooWidgetDataModel を作成します。
public class FooWidgetDataModel {
public int Column1 {get; set;}
public int Column2 {get; set;}
public int Column3 {get; set;}
}
FooWidgetDataController で FooWidgetDataModel を入力し、ビューに返します。
public class FooWidgetDataController : Controller {
public ActionResult Index(){
var model = new FooWidgetDataModel{ Column1=5, Column2=1 }; // loading of data for FooWidgetDataModel
return View(model); // using a view with name Index.ascx or Index.aspx
}
}
FooWidgetSettingsModel を作成します。
public class FooWidgetSettingsModel {
public bool ShowColumn1 {get; set;}
public bool ShowColumn2 {get; set;}
public bool ShowColumn3 {get; set;}
}
FooWidgetSettingsController のサンプル コード:
// add some permission verification attribute here
public class FooWidgetSettingsController : Controller {
[AcceptGet]
public ActionResult Index(){
var model = new FooWidgetSettingsModel{ ShowColumn1=true, ShowColumn2=false }; // loading of data for FooWidgetSettingsModel
return View(model); // using a view with name Index.ascx or Index.aspx
}
[AcceptPost, ActionName("Index")]
public ActionResult IndexPost(FooWidgetSettingsModel model){ // model will be automatically binded by built it functionality
// validate model
// save settings if valid
// and return whatever you want here
return RedirectToAction("Index"); // for example, redirecting to edit page
}
}
このアプローチを使用すると、ウィジェットごとにコントローラーを作成する必要があります。おそらく気に入らないかもしれませんが、いくつかの拡張機能や基本クラスを使用すると、多くのコードを記述する必要がなくなります。そして、コードは読みやすくシンプルになります。
ページにウィジェットをレンダリングするには、Html.RenderAction の使用を検討してください (以前は mvc futures アセンブリにありましたが、現時点では変更を追跡していません)。コントローラーをできるだけ薄く保ち、
asp.net
mvcのベスト プラクティスを確認してください (リンク 1およびリンク 2 )。