Ich versuche Dot Liquid zu verwenden, die eine der coolsten Templating-Engines für C# ist. Dot Liquid verwendet einen Weg, um die Verwendung von Vorlagen sicher zu machen. Hier Here is the explanation page.Erstellen Sie eine DataRow-Klasse, die ILiquidizable implementiert
ist die Erklärung von ihr Wiki ist:
DotLiquid, standardmäßig akzeptiert nur eine begrenzte Anzahl von Typen als Parameter auf die Render-Methode - einschließlich der .NET Urtyp (int, float, Zeichenkette, etc.), und einige Sammlung Typen einschließlich IDictionary, IList und IIndexable (eine benutzerdefinierte DotLiquid Schnittstelle).
Wenn es beliebige Typen unterstützt, dann es in Eigenschaften oder Methoden unbeabsichtigt ausgesetzt zu Vorlage Autoren führen könnte. Um dies zu verhindern, verwendet DotLiquid Drop-Objekte. Drops verwenden einen Opt-In-Ansatz zum Aussetzen von Objekt Daten.
The Drop-Klasse ist nur eine Implementierung von ILiquidizable und der einfachste Weg, Ihre Objekte DotLiquid Vorlagen implementieren ILiquidizable direkt
Wiki Beispielcode ist aussetzen:
public class User
{
public string Name { get; set; }
public string Email { get; set; }
}
public class UserDrop : Drop
{
private readonly User _user;
public string Name
{
get { return _user.Name; }
}
public UserDrop(User user)
{
_user = user;
}
}
Template template = Template.Parse("Name: {{ user.name }}; Email: {{ user.email }};");
string result = template.Render(Hash.FromAnonymousObject(new
{
user = new UserDrop(new User
{
Name = "Tim",
Email = "[email protected]"
})
}));
Also, wenn ich DataRow zu Flüssigkeit übergebe, lasse Flüssigkeit mir seinen Inhalt zeigen und sagt mir:
‚System.Data.DataRow‘ ist ungültig , weil es weder ein integrierter Typ noch implementiert ILiquidizable
Gibt es irgendwelche Lösungen DataRow Objekt zu übergeben, die ILiquidizable auch implementiert? Danke
Wahrscheinlich müssen Sie die 'DataRow' in eine eigene Klasseninstanz konvertieren, die' ILiquidizable' implementiert. Ich sehe nicht, wie Sie eine vorhandene Klasse wie 'DataRow' plötzlich eine neue Schnittstelle unterstützen könnten .... –