2016-07-14 10 views
5

backgourndDodawanie wartości do listy, która jest oparta na modelu

Obecnie próbuję dodać wartość do listy modelu jednak wydaje się być inna niż w jaki sposób mogę to zrobić w JavaScript .

model

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

Funkcja dodać wartość

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 
    } 

Pytanie

Próbuję dodać wynik z HtmlAttribute att = img.Attributes["src"]; do string[] images mojego l ist. W ten sposób raz wypełnić iteracji będę mógł mieć wszystkie wartości, które dostaję od moich dla każdej pętli w string[] images część mojej liście

Aktualizacja

Jest to funkcja poprzedzający że zapełnia Inne przedmioty w moim liście

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

Próbując dodać att.Value do nieruchomości Obrazy wewnątrz listy powrotnej –

+0

Czy lista zawiera tylko jeden element, który 'ContentBase' ustawioną swoją właściwość' images'? –

+0

Nie było, tak, będzie zawierać elementy, które są odbierane z mojej dla każdej pętli. Liczba elementów będzie dynamiczna, a nie statyczna. –

Odpowiedz

0

returnList jest List<ContentBase>, więc należy dodać nowy ContentBase do lista.

Obiekt ContentBase zawiera właściwość string[] images, którą można utworzyć w pętli lub przy pomocy linq i przekazać ją do nowo utworzonego ContentBase. Należy również podać wartość innych właściwości utworzonego ContentBase. Na przykład:

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

Tutaj returnList jest lista ContentBase więc jego elementy powinny być przedmiotem odpowiedniej klasy. Więc kod, aby dodać elementy do tego będzie jak następuje:

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

można po prostu stworzyć ContentBase obiekt, a następnie dodać go:

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

Myślę, że 'base.image = att.value;' będzie źle, ponieważ 'att.Value' będzie ciągiem, a' base.image' będzie tablicą ciągów –

1

Można używać LINQ, nawet bez korzystania z foreach pętli, podobnie jak to:

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