2017-06-14 71 views
0

我將存儲過程傳遞到我的控制器,然後我想將其發送到我的視圖並將存儲過程的每個條目記錄到下拉菜單中。我的問題是,當我將數據傳遞到下拉菜單時,我得到的只是System.String []而不是實際值。將數據從SQL傳遞到MVC數組System.String []錯誤

控制器:

public ActionResult Dropdown() 
{ 
    ViewData["ids"] = db.uspGetAllEventIds().ToArray(); 
    return View(); 
} 

查看:

@model IEnumerable<Heatmap.Models.Event> 
... 
<body> 
    <div> 
     <select name="EventId"> 
      @for (var i = 0; i < 6; i++) 
      { 

       <option>@ViewData["ids"]</option> 
      } 
     </select> 

    </div> 
</body> 

現在我只有一個簡單的for循環設置爲6,但我想通過我的整個ids陣列迭代(它應該填寫從db.uspGetAllEventIds()的值並將它們輸入到我的下拉菜單中。我應該如何設置我的循環來執行此操作?

+0

@Icarus我傳遞來自控制器陣列進行查看。我很困惑你在哪裏迷路。也許我可以解釋更多? –

+0

如果viewdata是一個列表,是不是應該通過索引'@ViewData [「ids」] [i]'來訪問? – lloyd

+0

@lloyd是的,這也是我的想法。我不記得確切的原因(自上週三以來我沒有看過它),但它是編譯器錯誤或返回System.String []。 –

回答

1

使用字符串數組內ViewData對象,你需要轉換成ViewDatastring[]操作as(或乾脆直接鑄造如果你確定不扔除外),後來重複的內容如下圖所示代碼:

@model IEnumerable<Heatmap.Models.Event> 
... 
<body> 
    <div> 
     <select name="EventId"> 
      @{ 
       // a simple (string[])ViewData["ids"] also work here 
       var ids = ViewData["ids"] as string[]; 
       for (var i = 0; i < 6; i++) 
       { 
        <option>@ids[i]</option> 
       } 
      } 
     </select> 
    </div> 
</body> 

工作實施例:.NET Fiddle Demo

NB:不能訪問內部for循環使用ViewData["ids"][i]數組元素因爲ViewData是具有動態辭典類型,而不是object[]。提示:如果要遍歷整個ids陣列,則在鑄造ViewData後使用作爲for循環中的上限值。

參考:

ASP.NET MVC - How to pass an Array to the view?

How to pass an array from Controller to View?

+0

太棒了!非常感謝!對於遲到的迴應抱歉,我在週末的早些時候xD –