2011-08-19 8 views
0

私は自分のサイトにデータベースに格納されているコンテンツを表示する機能を設定しています。このコンテンツには、サイト上の他のリソースへのリンクが頻繁にあります。 DBに登録されたmvcのテキストコンテンツのルートを置換する

:デバッグおよびその他の理由により

"Lorem ipsum dolor sit <a href='http://mysite.com/somecontroller/someaction'>amet</a>." 

、私はそのURLのハードコードにしたくありません。 http://mysite.com/somecontroller/someactionUrlHelper.Action("somecontroller", "someaction")に置き換えたいとします。

自分で作成した規約に基づいて代替品を書くことができます。それは簡単で、私がしたいことを達成するでしょう。しかし、私はいくつかのよりクリーンな、またはより標準的な解決策が欠けているかもしれないと思った。だから、これを行うためのより洗練されたより保守的な方法がありますか?

答えて

1

おそらく交換が最も簡単で、メンテナンスが簡単です。これを処理する別の方法は、ASP.Netにコードの解析を許可することです。ファイルシステムに加えてデータベースからビューを取得できるようにする独自のVirtualPathProviderを作成する必要があります。その後、あなたは使用することができました

Html.RenderPartial(nameVirtualPathProviderUnderstands); 

これは、データベースの文字列をファイルのようにレンダリングします。これはあまり安全ではありませんが、VirtualPathProviderでレンダリングする前に内容を変更する必要があります。 Hereは、独自のVirtualPathProviderを実装する方法を説明するガイドです。

+0

私はちょうど魔法の文字列置換法で行こうと思います。しかし、将来のリファクタリングの可能性として、カスタムのVirtualPathProviderについてのアイデアを保存すると思います。 – Hypnovirus

+0

@Danの最大の欠点は、誰がコンテンツに入っているのか、どのようにコードと同期しなくなるのだろうか。私は自分のPathProviderを作成して、dllでコンパイルされたリソースからViewsを引き出す必要がありました。それはうまくなったが、もっと問題があると思う。 –

+0

今のところ、内容は私のスタッフの何人かの部分を流れてしまいます。ユーザーが編集できるようにする前に、文字列規則をリファクタリングするか、かなり強力なUIツールと検証を提供する必要があります。 – Hypnovirus

0

私は私のプロジェクトの一つにそうようにハック「」作られた:

public class UrlLinks 
    { 
     public static string HomeLink { get; protected set; } 

     public static UrlLinks() 
     { 
      HomeLink = Link<HomeController>(x => x.Index()); 
     } 

     protected static string Link<TControllerType>(Expression<Func<TControllerType, object>> expression) 
     { 
      return "methodName"; 
     } 
    } 

私はリファクタリングので、もし基本的には、リンクが、表現やジェネリックパラメータ経由で型名とメソッド名から構成されます、私は新しいメソッドとコントローラの名前を拾うだろう。

次に私の見解で、私はこれを行うことができます - 魔法の文字列の必要性を排除:

<a href="@UrlLinks.HomeLink">Home</a> 
関連する問題