2014-10-31 41 views
0

我想創建一個基於集合的圖例,下面的代碼進入Shapefile並提取特定的列數據,然後我們爲數據分配一個顏色。這是我在控制器中創建的,我想知道是否可以創建基於這個集合的HTML圖例,我想這樣做的方式是創建與我們想要傳說的每個圖層的單選按鈕。我知道這可能是模糊的,但我真的不知道如何描述它。動態創建一個基於集合的顏色圖例

任何建議,將不勝感激

private Collection<ValueItem> colorSelect(Collection<Feature> allFeatures, string layercode,Collection<ValueItem> valueItems) 
    { 

     List<string> values = new List<string>(); 
     foreach (Feature f in allFeatures) 
     { 
      if (f.ColumnValues.ContainsKey(layercode)) 
      { 
       if (!values.Contains(f.ColumnValues[layercode].ToString())) 
       { 
        values.Add(f.ColumnValues[layercode].ToString()); 
       } 
      } 

     } 


     if (values.Count > 0) 
     { 
      Random randomGen = new Random(); 
      int count = 0; 
      foreach (string esnCode in values) 
      { 
       //int count = 0; 
       if (count == 0) 
       { 
        ValueItem item = new ValueItem(esnCode, AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.Green, GeoColor.StandardColors.Black, 3)); 
        valueItems.Add(item); 

       } 
       if (count == 1) 
       { 
        ValueItem item = new ValueItem(esnCode, AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.Pink, GeoColor.StandardColors.Black, 3)); 
        valueItems.Add(item); 

       } 
       if (count == 2) 
       { 
        ValueItem item = new ValueItem(esnCode, AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.Blue, GeoColor.StandardColors.Black, 3)); 
        valueItems.Add(item); 

       } 
       if (count == 3) 
       { 
        ValueItem item = new ValueItem(esnCode, AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.Yellow, GeoColor.StandardColors.Black, 3)); 
        valueItems.Add(item); 

       } 
       if (count == 4) 
       { 
        ValueItem item = new ValueItem(esnCode, AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.Violet, GeoColor.StandardColors.Black, 3)); 
        valueItems.Add(item); 

       } 
       if (count == 5) 
       { 
        ValueItem item = new ValueItem(esnCode, AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.Red, GeoColor.StandardColors.Black, 3)); 
        valueItems.Add(item); 

       } 
       if (count == 6) 
       { 
        ValueItem item = new ValueItem(esnCode, AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.Aqua, GeoColor.StandardColors.Black, 3)); 
        valueItems.Add(item); 

       } 
       if (count == 7) 
       { 
        ValueItem item = new ValueItem(esnCode, AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.Black, GeoColor.StandardColors.Black, 3)); 
        valueItems.Add(item); 

       } 
       if (count == 8) 
       { 
        ValueItem item = new ValueItem(esnCode, AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.Brown, GeoColor.StandardColors.Black, 3)); 
        valueItems.Add(item); 

       } 
       if (count == 9) 
       { 
        ValueItem item = new ValueItem(esnCode, AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.Coral, GeoColor.StandardColors.Black, 3)); 
        valueItems.Add(item); 

       } 
       if (count == 10) 
       { 
        ValueItem item = new ValueItem(esnCode, AreaStyles.CreateSimpleAreaStyle(GeoColor.StandardColors.DarkKhaki, GeoColor.StandardColors.Black, 3)); 
        valueItems.Add(item); 

       } 
       count++; 
      } 

     } 
     return (valueItems); 
    } 

回答

1

好了,一旦你取你的顏色數據,你必須把它傳遞給視圖,並用它做什麼。 你傳遞的2種選擇:

  1. 爲模型
  2. 在ViewBag

並不重要,你選擇什麼樣的選擇,但可以說,我們通過它查看購物袋。

public ActionResult ColorsLegend() 
{ 
    var listOfColors = colorSelect(args..); 
    ViewBag.colorList = listOfColors; 

    return View(); 
} 

在視圖中,您可以遍歷這個顏色列表並執行實際的操作。 F.e讓我們爲該顏色創建一個顏色塊和名稱列表

@foreach(var item in ViewBag.colorList){ 
    <div style='background-color:@item.colorValue;width:100px;height:20px;float:left;'></div> 
    <span style='float:left;'> - @item.colorName </span> 
} 
+0

不好意思問,但你會如何用模型做這件事? – 2014-10-31 20:53:56

+0

如果你有一個模型,那麼在控制器中,你應該像下面這樣將它傳遞給視圖:return View(myModelObject); 並且在頂部的視圖中,您應該指定視圖期望的類型,而不是ViewBag.colorList使用Model.ColorList,或者只是Model,如果Model是顏色列表本身:) – 2014-11-02 19:23:28