2016-07-25 22 views
-1

MVCアプリケーションは、3つの異なるバージョン(別々のビジネスエリアでは別々のDBとUIが必要です)としてデプロイされています。唯一の問題は、少数のユーザーがこれらのアプリケーションを1つ以上使用していることと、同じような人々が、どちらが使用しているのかと紛らわしく見えるからです。Asp.net MVC公開時に変更する

私はアプリのタイトルを変更するためにweb.configトランスフォームを使用しますが、何をしたいのですかは、それぞれ異なるCSSファイルで配信することです。方法はありますか:

既存のCSSファイルを編集するには、パブリッシュ時にトランスフォームを使用しますか? または パブリッシュ時に別のCSSファイルを交換しますか?

正しい方向に私を指し示す助けがあれば素晴らしいだろう。 おかげ

私は似たようなケースでやった
+0

しかし、結果として得られるHTMLのアプリケーションには、異なるクラスやIDなどはありませんか? –

+0

はいメンテナンスを最小限に抑えるため、2つのアプリケーションのHtmlは可能な限り同じです。 – Lobsterpants

+0

私はダウン票を得たwhayを知って愛する? – Lobsterpants

答えて

1

:私はdynamicly体<body class="[email protected]">上のクラスを入れて、私のようなオーバーライドで唯一のCSSを持っている:ユーザーが複数のサイトを使用する場合、そうでない

.theme-site1 { background-color:blue; } 
.theme-site2 { background-color:red; } 

cssを再ダウンロードし、私は維持するためにただ1つのCSSを持っています。

+0

ああ、きちんとしたアイデア - ありがとう – Lobsterpants

1

このは、あなたが今探している答えではありませんが、異なる構成と同じサイトを使用して再考しなければ、私は動的にCSSのなどを変更するために、最近何をしたかを見てみましょう:

私は、ウェブサイトの各「バージョン」がクエリ文字列内で一意の参照を使用することに決めました。これに基づいて、正しいコンテンツを見つけ出し、モデルにパスをロードしてビューに送信します。ここ

コントローラの:

public ActionResult Index() 
     { 
      List<string> listOfAcceptableRef = new List<string>() { "uniqueCode1", "uniqueCode2" }; 
      string uniqueRef=null; 
      if (Request.QueryString["ref"]!=null) 
       policyRef = Request.QueryString["ref"].ToLower(); 
      if (string.IsNullOrWhiteSpace(uniqueRef) || (!string.IsNullOrWhiteSpace(uniqueRef) && !listOfAcceptableRef.Contains(uniqueRef))) 
      { 
       throw new Exception("This reference key is unknown."); 
       //return RedirectToAction("KeyError"); 
      } 
      return View(GetPageContext(uniqueRef)); 
     } 

は、クエリ文字列から基準コードを取得し、コンテキスト・ファクトリから関連CSSパスを含むモデルを生成します。

ここに私のモデルです:

public class PageContext 
    { 
     public string Ref { get; set; } 
     public string TabId { get; set; } 
     public string TabName { get; set; } 
     public string SiteTitle { get; set; } 
     public string CssPath { get; set; } 

     public PageContext() 
     { 
      Products = new List<ProductInfo>(); 
     } 
    } 

そして、私のコンテキストファクトリ:CSSのパスなどで

public class ContextFactory<T> 
    { 
     private ContextFactory() 
     { 

     } 

     static readonly Dictionary<string, Type> _dict = new Dictionary<string, Type>() 
      { 
       { "uniqueRef1", Type.GetType("The.Full.Page.Namespace.UniqueSite1Context")}, 
       { "uniqueRef2", Type.GetType("The.Full.Page.Namespace.UniqueSite2Context")} 
      }; 

     public static bool Create(string reference, out T context) 
     { 
      context = default(T); 
      Type type = null; 
      if (_dict.TryGetValue(reference, out type)) 
      { 
       context = (T)Activator.CreateInstance(type); 
       return true; 
      } 
      return false; 
     } 
    } 

そして、実際のコンテキストインスタンス:すべてのその後

public class UniqueSite1Context : PageContext 
    { 
     public UniqueSite1Context() 
     { 
      this.Ref = "uniqueSite1"; 
      this.CssPath = "Content/UniqueSite1Context.css"; 
      this.DisclaimerPath = "Content/UniqueSite1Context.pdf"; 
      this.SiteTitle = "UniqueSite1"; 

     } 
    } 

、ちょうどモデルのパスを使用してCSSをレンダリングします。

構造的に言えば、これを拡張して(の概念)、ユーザーが移動する「サイト」に基づいて異なるロジックおよびデータコンテキストを使用することができます。

+0

あなたがそこでやったことと同じですが、同じサイトを再利用することは、この場合は本当にオプションではありません。 – Lobsterpants

0

トランスフォームファイルはありますか?選択したパブリッシュプロファイルに基づいて、パブリッシュ時にweb.configファイルの設定が変更されます。通常、デフォルトで利用できるプロファイルは "Debug"と "Release"ですが、 "Site1"と "Site2"のようなCSSパスを追加することができます。

Take a look at how they work here.(私は自分で使っていないので、コード例ではあまり役に立ちません)。

+0

ええ、すでに変換ファイルを使用してサイト名とデータベースを変更しています。私はToniosの答えと組み合わせて使うと思っています。だから私たちはconfigで別の設定を取得し、それに基づいて別のCSSファイルを表示します。 – Lobsterpants

関連する問題