請問,我自製一個下拉式元件,在controller程式碼:
List mySelectItemListY = new List();
mySelectItemListY.AddRange(new[]{
new SelectListItem() {Text = Y1.ToString(), Value = Y1.ToString(), Selected = true},//Selected = true
});
for (int i = 0; i < 2; i++)
{
Y1 = Y1 - 1;
mySelectItemListY.AddRange(new[]{
new SelectListItem() {Text = Y1.ToString(), Value = Y1.ToString(), Selected = false},});
}
ViewBag.YEAR = mySelectItemListY;
而在view程式碼:
@Html.DropDownList("YEAR")
我想抓到這下拉式的值,但它一直錯誤訊息:
HResult=0x80131509
Message=沒有型別為 'IEnumerable' 且具有索引鍵 'YEAR' 的 ViewData 項目。
請問,我該怎麼修正我錯誤的地方呢?謝謝
網頁執行的出來,但我按「查詢」想試試能不能抓到值,就出現這訊息。
「HResult=0x80131509
Message=沒有型別為 'IEnumerable' 且具有索引鍵 'YEAR' 的 ViewData 項目。
Source=System.Web.Mvc」
不要使用dynamic做泛型,請使用SelectListItem
Controller
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
public class HomeController : Controller
{
public ActionResult Index()
{
var Y1 = 2;
var mySelectItemListY = new List<SelectListItem>();
mySelectItemListY.AddRange(new[]{
new SelectListItem() {Text = Y1.ToString(), Value = Y1.ToString(), Selected = true},//Selected = true
});
for (int i = 0; i < 2; i++)
{
Y1 = Y1 - 1;
mySelectItemListY.AddRange(new[]{
new SelectListItem() {Text = Y1.ToString(), Value = Y1.ToString(), Selected = false}
});
}
ViewBag.YEAR = mySelectItemListY.AsEnumerable();
return View();
}
}
View:
@{Layout = null;}
@Html.DropDownList("YEAR")
結果:
不過,我按,按鈕後,一樣出現「System.InvalidOperationException: '沒有型別為 'IEnumerable' 且具有索引鍵 'YEAR' 的 ViewData 項目。'」
請教,我前面設計:
int YEAR = Int32.Parse(date.Year.ToString());//抓取今年度
int Y1 = YEAR - 1911;//換數民國年
SelectListItem,只能設定固定值嗎?
不好意思,剛學,有很多認知不足。謝謝
稍微整理一下自己遇到的結論 :
1 表單提交的時候 post 驗證有誤,觸發 return view()
2 渲染 view 的時候,這時候沒給 viewbag 或 viewdata 給值
3 @html 檢查到空無一物的時候抱錯
解法 :
post 的 action 也要給 viewbag 或 viewdata值