2011-12-07 3 views
1

나는 면도기 뷰 엔진을 사용하여 XML 문서 내에 살고있는 일부 HTML을 렌더링하고 있습니다. 내가 사용하고있는 기본 클래스에는 해당 객체의 목록을 반환하는 정적 메서드 (Dapper를 사용하여 목록을 채 웁니다)와 함께 많은 속성이 있습니다. 그것은 추상적 인 클래스 인 기본 클래스를 반환해야하기 때문에 메서드를 실행하는 데 문제가 있습니다. 일부 샘플 코드는 아래에 있습니다.복잡한베이스 클래스의 콘솔 앱에있는 면도기 뷰 엔진

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

관련 문제