1

私は ASP.NET MVC 4 プロジェクトを持っています。このプロジェクトにはメイン ページがあり、訪問者はサブトピックを選択する必要があります。したがって、構造は次のとおりです。

sypalo.com
photo.sypalo.com
seo.sypalo.com
... and so on

サブドメインへのルーティングを処理するために AttributeRouting.net nuget パッケージを使用しています。したがって、各コントローラーは別々の領域にあり、次のデータ注釈があります (この場合は SEOController):

[RouteArea("SEO", Subdomain = "seo")]
public class SEOController : Controller
{
    private IPostRepository PostRepository;

    public SEOController()
    { this.PostRepository = new PostRepository(new BlogEntities()); }

    public SEOController(IPostRepository PostRepository) 
    { this.PostRepository = PostRepository; }

    [GET("{page?}")]
    public ActionResult Index(int? page)
    { return View(PostRepository.GetPosts("SEO", page ?? 1)); }

    [GET("{year}/{month}/{link}")]
    public ActionResult Details(int year, int month, string link)
    {
        Post post = PostRepository.GetPost("SEO", link);
        if (post == null) return HttpNotFound();
        return View(post.Text.Replace(ViewRes.Main.ReadMore, ""));
    }
}

重複コードの量を減らすためにリポジトリを実装しましたが、サブドメインごとに CRUD アクションを備えたコントローラーが必要です。それらはすべて、サブドメインと呼ばれる個別のフィールドを持つ単一のテーブルを使用しており、各コントローラーでサブドメイン名を静的に渡しています。

各サブドメインにも独自のアクション/ビューがあるため、CRUD 機能を備えた基本コントローラー クラスを作成し、それを派生クラスで拡張する方法を探しています。AFAIK ビューまたは SharedView の場所を指定して、複数のコントローラー (単一のインデックス/詳細/編集ビュー) で使用される単一のビューを持ち、ページ タイトルやその他のタグを ViewBag に渡して、異なるサブドメインに対して同じコードを維持することを避けることができますが、誰かがより良いアプローチを提案していただければ幸いです。

4

1 に答える 1

1

あなたはこのようなことをすることができます

public abstract class MyBaseController : Controller
{
    public virtual void Create() 
    {
        //standard implementation
    }
}

public class SEOController : MyBaseController 
{
    public override void Create()
    {
        //specific to SEO
    }
 }

SEOController に固有のものをオーバーライドするだけで、それ以外はすべてデフォルトのMyBaseControllerメソッドを使用できます。

他のクラスもそれらを必要とする場合は、おそらくあなたPostRepositoryのものをベースコントローラーにも移動したいと思うでしょうが、それがあなたがしたいことであるかどうかを確実に言うには、あなたの実装について十分に知りません.

于 2013-10-24T15:01:09.100 に答える