Frage

Ich verwende die Razor View Engine, um HTML zu rendern, das dann in einem XML-Dokument gespeichert wird.Die von mir verwendete Basisklasse verfügt über eine Reihe von Eigenschaften sowie eine statische Methode, die eine Liste dieses Objekts zurückgibt (wobei Dapper zum Auffüllen der Liste verwendet wird).Ich habe Probleme beim Ausführen der Methode, da sie die Basisklasse zurückgeben muss, die eine abstrakte Klasse ist.Einige Beispielcodes finden Sie weiter unten.

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

Grundsätzlich schlägt mein Aufruf von PersonData.GetPeople() fehl, da die PersonData-Klasse abstrakt ist.Alle Gedanken wäre dankbar.Ich verwende das Beispiel von hier als mein Führer.

War es hilfreich?

Lösung

Sie versuchen, das Modell und die Ansicht zusammenzuführen.
Tu das nicht;es kann unmöglich funktionieren.

Übergeben Sie das Modell stattdessen als separate Eigenschaft an die Ansicht und laden Sie es möglicherweise in den TemplateBase-Konstruktor.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top