2016-07-14 18 views
5

BackgourndHinzufügen eines Wertes zu einer Liste, die auf einem Modell

ich basierend versucht bin derzeit einen Wert auf eine Liste eines Modells scheint es anders zu sein aber hinzuzufügen, als wie ich es in JavaScript tun würde .

Modell

public class ContentBase 
{ 

    public string Name { get; set; }  
    public string Description { get; set; } 
    public string LastModifiedTime { get; set; } 
    public string KeyWords { get; set; } 
    public string Content { get; set; } 
    public string UniqueId { get; set; } 
    public string library { get; set; } 
    public string ContentSummary { get; set; }   
    public string[] images { get; set; } 
} 

Funktionswert zu

List<ContentBase> returnList = new List<ContentBase>(); 
foreach (HtmlNode img in htmlDocument.DocumentNode.SelectNodes("//img")) 
    { 
    HtmlAttribute att = img.Attributes["src"]; 
    returnList.Add(images = att.Value); << this is wrong, just trying to give an idea of my intentions 
    } 

Frage

ich das Ergebnis von HtmlAttribute att = img.Attributes["src"]; in string[] images meiner l hinzufügen versuche ist. Auf diese Weise, wenn ich diese Iteration abschließen ich alle Werte haben können, die ich von meinem für jede Schleife im string[] images Teil meiner Liste

aktualisieren

Dies wird die vorhergehende Funktion, füllt die bekommen weitere Artikel in meiner Liste

string content = ""; 
if (includeContent == true) 
{ 
    content = rslt[ContentBase.fastContent] != null ? rslt[ContentBase.fastContent].ToString() : ""; 
} 

returnList.Add(new ContentBase() 
{ 
    UniqueId = rslt[ContentBase.fasstUniqueId] != null ? rslt[ContentBase.fasstUniqueId].ToString() : "", 
    LastModifiedTime = rslt[ContentBase.fasstLastModifiedTime] != null ? rslt[ContentBase.fasstLastModifiedTime].ToString().Substring(0, 8) : "", 
    Name = rslt[ContentBase.fastName] != null ? rslt[ContentBase.fastName].ToString() : "", 
    Description = rslt[ContentBase.fastDescription] != null ? rslt[ContentBase.fastDescription].ToString() : "", 
    KeyWords = rslt[ContentBase.fastKeyWords] != null ? rslt[ContentBase.fastKeyWords].ToString() : "", 
    ContentSummary = rslt[ContentBase.fasstContentSummary] != null ? rslt[ContentBase.fasstContentSummary].ToString() : "", 
    Content = content, 

}); 
+0

Versuch att.Value auf die Eigenschaft Images innerhalb der Rückgabeliste hinzufügen –

+0

Würde die Liste nur ein einziges 'ContentBase' Element enthält, die Sie seine' images' Eigenschaft? –

+0

War weg, ja es wird die Elemente enthalten, die von mir für jede Schleife empfangen werden. Die Elementanzahl ist dynamisch, nicht statisch. –

Antwort

0

die returnList ist ein List<ContentBase>, so sollten Sie einen neuen ContentBase addieren, Liste.

Das Objekt ContentBase enthält eine string[] images Eigenschaft, die Sie in der Schleife erstellen oder mit linq erstellen und an die neue ContentBase erstellen können. Sie sollten auch den Wert anderer Eigenschaften der erstellten ContentBase angeben. Zum Beispiel:

var returnList = new List<ContentBase>(); 
returnList.Add(new ContentBase() 
{ 
    // Initialize properties the same way you are setting them 
    // Including the images property this way: 
    images = htmlDocument.DocumentNode.SelectNodes("//img") 
         .Select(x=>x.Attributes["src"].Value).ToArray() 
}); 
1

Hier die returnList ist eine Liste der ContentBase so seine Elemente die Objekte der entsprechenden Klasse sein sollte. So ist der Code Artikel zu diesem hinzufügen wird wie die folgenden sein:

foreach (HtmlNode img in htmlDocument.DocumentNode.SelectNodes("//img")) 
    { 
    HtmlAttribute att = img.Attributes["src"]; 
    returnList.Add(new ContentBase(){library="some value",images = new string[]{att.value}} 
    } 
1

Sie können ein erstes ContentBase Objekt einfach erstellen und fügen Sie dann:

List<ContentBase> returnList = new List<ContentBase>(); 
foreach (HtmlNode img in htmlDocument.DocumentNode.SelectNodes("//img")) 
    { 
    HtmlAttribute att = img.Attributes["src"]; 
    ContentBase base = new ContentBase(); 
    base.image = att.value; 
    returnList.Add(base); 
    } 
+1

Ich denke 'base.image = att.value;' wird falsch sein, da 'att.Value' eine Zeichenkette ist und' base.image' ein Zeichenketten-Array –

1

können Sie Linq verwenden, ohne auch nur die foreach mit Schleife, wie folgt aus:

List<ContentBase> returnList = htmlDocument.DocumentNode.SelectNodes("//img") 
    .Select(img => new ContentBase {images = new[] {img.Attributes["src"].Value}}).ToList();