Razor Ver el motor en la aplicación de la consola con la clase de bajos complejos

StackOverflow https://stackoverflow.com/questions/8410150

  •  29-10-2019
  •  | 
  •  

Pregunta

Estoy usando el motor de vista de Razor para renderizar algo de HTML que luego vivirá dentro de un documento XML.la clase base que estoy usando tiene una serie de propiedades, junto con un método estático que devolverá una lista de ese objeto (usando Dapper para completar la lista).Tengo problemas para ejecutar el método porque necesita devolver la clase base, que es una clase abstracta.A continuación se muestra un código de muestra.

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

Básicamente, mi llamada a PersonData.GetPeople() está fallando porque la clase PersonData es abstracta.Cualquier pensamiento será apreciado.Estoy usando el ejemplo de aquí como mi guía.

¿Fue útil?

Solución

Está intentando fusionar el modelo y la vista.
No hagas eso;no puede funcionar.

En su lugar, pase el modelo a la vista como una propiedad separada, quizás cargándolo en el constructor TemplateBase.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top