2011-12-07 2 views
1

私はRazorビューエンジンを使用して、XMLドキュメント内に存在するHTMLをレンダリングしています。私が使用している基本クラスは、そのオブジェクトのリストを返す静的メソッド(Dapperを使用してリストを作成する)とともにいくつかのプロパティを持っています。私はそれが抽象クラスである基本クラスを返す必要があるので、メソッドを実行するのに問題があります。いくつかのサンプルコードは以下の通りです。複雑なベースクラスを持つコンソールアプリケーションのRazor View Engine

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Dapper; 
using System.Data.SqlClient; 
using System.Configuration; 
using System.ComponentModel; 
using System.IO; 

namespace LocalBranchesPOC 
{ 
    public abstract class PersonData : TemplateBase 
    { 
     #region Properties 
     public string RecordId { get; set; } 
     public string Name { get; set; } 
     public string Address { get; set; } 
     public string City { get; set; } 
     public string County { get; set; } 
     public string State { get; set; } 
     public string Country { get; set; } 
     public string Zip { get; set; } 
     public string Phone { get; set; } 
     public string Variable1 { get; set; } 
     public string Variable2 { get; set; } 
     public string Variable3 { get; set; } 

     #endregion 

     public static List<PersonData> GetPeople() 
     { 
      const string QUERY = "SELECT [RecordId], [Name], [Address], [City], [County], [State], [Country], [Zip], [Phone], [Variable1], [Variable2], [Variable3] FROM Data.Person"; 

      using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["BranchLocator"].ConnectionString)) 
      { 
       return getPeople(QUERY, conn); 
      } 
     } 

     private static List<PersonData> getPeople(string QUERY, SqlConnection conn) 
     { 
      conn.Open(); 
      var result = conn.Query<PersonData>(QUERY).ToList(); 
      conn.Close(); 
      return result; 
     } 
    } 

    public abstract class TemplateBase 
    { 
     [Browsable(false)] 
     public StringBuilder Buffer { get; set; } 

     [Browsable(false)] 
     public StringWriter Writer { get; set; } 

     public TemplateBase() 
     { 
      Buffer = new StringBuilder(); 
      Writer = new StringWriter(Buffer); 
     } 

     public abstract void Execute(); 

     // Writes the results of expressions like: "@foo.Bar" 
     public virtual void Write(object value) 
     { 
      // Don't need to do anything special 
      // Razor for ASP.Net does HTML encoding here. 
      WriteLiteral(value); 
     } 

     // Writes literals like markup: "<p>Foo</p>" 
     public virtual void WriteLiteral(object value) 
     { 
      Buffer.Append(value); 
     } 
    } 
} 

PersonDataクラスが抽象的であるため、基本的にPersonData.GetPeople()に私の呼び出しが失敗しています。いかなる考えも認められるだろう。私はhereの例を私のガイドとして使用しています。

答えて

0

モデルとビューをマージしようとしています。
しないでください。それはおそらくうまくいかない。

代わりに、モデルを別のプロパティとしてビューに渡します。これはおそらくTemplateBaseコンストラクタにロードします。

+0

あなたは正しいと思います。私はいくつかの例のコードを見ることができますか? – CodeMonkey1313

+0

NugetのRazorEngineを使用した場合、私は自分自身で多くの問題を解決することができたかのように見えます:) – CodeMonkey1313

+0

はい。私はあなたがすでにそれを使っていると思っていました。 – SLaks

関連する問題