MVC4 と Razor を手に入れてボールを持っていますが、達成したいことへのアプローチについて質問があります。
(ダッシュボードのような) いくつかのパネルを含むページと、これらのパネルにドラッグ アンド ドロップしてモジュールをそのパネルに「インストール」し、そのコンテンツを表示できる一連のアイコンがあります。これは UI の観点からは素晴らしいことです。今、これをもう少し肉厚なものに接続することを検討しています。
私が持っているもの:
- IContentModule
- Render() メソッドを使用した各モジュールの具体的なクラスのセット
- モジュール ドロップ イベントを処理するコントローラーと、そのモジュール ドロップのクラスのインスタンスを取得するためのアクティベーター
単純なことは本当に、理想的には、各モジュールが独自のコンテンツを担当するようにしたいのですが、Render から文字列を返す以外に、特定のビュー マークアップをその特定の具体的なクラスに割り当てるなど、より良い方法はありますか?レンダリングされているものを制御できますが、より構造化された方法で、ここで最善のアプローチは何だろうか?
御時間ありがとうございます!
ダニー
編集:ビューを具体的なクラスに結合する方法があったかどうか、ちょっと考えてみませんか? たとえば、ViewForum.cshtml を ForumModule.cs にバインドし、何らかの方法でビューをインスタンス化し、オブジェクトのレンダリングから文字列を取得し、それを文字列を介して渡してパネルに挿入しますか?
パネルの例:
<section class="main box droppable" id="MainPanel">
<div class="padding">
Panel 1
</div>
</section>
jQuery イベント
$(".droppable").droppable({
hoverClass: 'boxhover',
drop: function (event, ui) {
$.ajax({
type: "POST",
url: '/Home/AddModule/' + $(ui.draggable).attr("id") + "?returnTo=" + this.id,
success: function(data) {
$("#" + data.Target).html(data.Content);
}
});
}
});
コントローラーメソッド
[AcceptVerbs(HttpVerbs.Post)]
public JsonResult AddModule(string id, string returnTo)
{
string content = DemoResolve(id);
try
{
IContentModule module = (IContentModule) Activator.CreateInstance(Type.GetType("Foo.Bar.BLLForumModule,Foo.Bar"));
content = module.Render();
}catch(Exception exp)
{
throw;
}
return Json(new { Target = returnTo, Content = content });
}
そのmodule.Render()がある場所で、部分的なビューまたは何かを取得し、手元にあるオブジェクトに基づいてレンダリングしたいと考えています