복잡한 배스 클래스의 콘솔 앱에서 면도기 뷰 엔진

c# dapper razor

문제

Razor 뷰 엔진을 사용하여 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 클래스가 abstract이므로 PersonData.GetPeople() 호출이 실패합니다. 어떤 생각이라도 감사 할 것입니다. 나는 나의 가이드로서 여기 에서 예제를 사용하고있다.

수락 된 답변

모델과 뷰를 병합하려고합니다.
그렇게하지 마라. 그것은 아마도 작동하지 않을 수 있습니다.

대신 뷰에 모델을 별도의 속성으로 전달합니다. TemplateBase 생성자에로드하는 것이 좋습니다.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.