2016-04-18 13 views
0

私は動的なオブジェクトの束を持っているシナリオです。それらはリフレクションを使用してロードされるので、オブジェクトを正しくレンダリングするためにhtmlを生成できるコードをビューに追加する方法はありません。これはどのように行うべきですか?かみそりヘルパーは良いようですが、コンパイル時にオブジェクトを知らないので、実際にはこれらを使用しません。ASP.NETコントローラでHTMLを生成

私が行ったことは、Personという基本オブジェクトを作成し、RenderHTML()という仮想メソッドを基本クラスに追加したものです。

public Medic : Person 
public Cop : Person 

次に、子クラスに含まれる追加コンテンツを正しく表示するHTMLを生成する各クラスで、このRenderHTMLメソッドをオーバーライドします。それは動作しますが、それは簡単には動作しません。単一の文字列を使用してそれに追加することは、物事が複雑になると非常に乱雑になります。

htmlstring += "some more html"; 

私はこのような何かを行うことができ、出力バッファのいくつかの並べ替えを設定する方法はあります。

string html = startBuffer(){ 

<html>wdfwjewe</html> 

} 

括弧内のコンテンツは、それを逃れるために、すべてのHTML文字列に保存されます空想何もないプレーンHTMLである可能性があります。私は現在の方法は、作業する痛みになっているように私は構文の強調表示のいくつかの種類を探しています。

+0

からです。 –

+0

MVCでビュー生成を処理させてみませんか?各タイプのパーシャルビューを作成します。 '〜/ Views/Shared/DisplayTemplates/Cop.cshtml'は、メインビューから部分ビューを参照し、オブジェクトを渡します。 @Html.DisplayFor(Model.PersonObject) '、またはサーバー側コードにHTML文字列として部分文字列を指定する必要がある場合は、ビュー+ビューモデルを文字列にレンダリングするテクニックの1つを使用します。推薦が必要かどうか質問してください。 –

答えて

1

使用することができますTagBuilder() これは、<html>からHTMLを構築する場合、タグのネストが必要です。代替StringBuilder()

例だろうHTMLが「クリーン」である場合は、代わりに文字列を直接作業の `XDocument`オブジェクトを使用することができdocumentation

public static string Image(this HtmlHelper helper, string id, string url, string alternateText, object htmlAttributes) 
     { 
      // Create tag builder 
      var builder = new TagBuilder("img"); 

      // Create valid id 
      builder.GenerateId(id); 

      // Add attributes 
      builder.MergeAttribute("src", url); 
      builder.MergeAttribute("alt", alternateText); 
      builder.MergeAttributes(new RouteValueDictionary(htmlAttributes)); 

      // Render tag 
      return builder.ToString(TagRenderMode.SelfClosing); 
     } 
関連する問題