Pergunta

Estou usando o mecanismo de visualização Razor para renderizar algum HTML que ficará dentro de um documento XML.a classe base que estou usando possui várias propriedades, junto com um método estático que retornará uma lista desse objeto (usando Dapper para preencher a lista).Estou tendo dificuldades para executar o método pois ele precisa retornar a classe base, que é uma classe abstrata.Alguns exemplos de código estão abaixo.

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);
        }
    }
}

Basicamente meu chamado para PersonData.GetPeople() está falhando porque a classe PersonData é abstrata.Qualquer pensamento seria apreciado.Estou usando o exemplo de aqui como meu guia.

Foi útil?

Solução

Você está tentando mesclar o modelo e a visualização.
Não faça isso;não pode funcionar.

Em vez disso, passe o modelo para a visualização como uma propriedade separada, talvez carregando-o no TemplateBase construtor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top