嘿,我是 Razor MVC 新手,想要制作一个选择框,其中列出了过去 10 年(2016 年、2015 年、2014 年等......)。
这是我当前的 Controller 代码:
public ActionResult loadPast10Years()
{
List<int> last10Years = new List<int>();
int currentYear = DateTime.Now.Year;
for (int i = currentYear - 10; i < currentYear; i++)
{
last10Years.Add(i);
}
ViewBag["last10Years"] = last10Years;
return View();
}
还有我的 Razor 代码:
@Html.DropDownList("last10Years", (SelectList)ViewBag["last10Years"], "--Select One--")
但是我在加载页面时遇到错误:
InvalidOperationException: There is no ViewData item of type 'IEnumerable' that has the key 'last10Years'.
那么...我错过了什么?
最佳答案
这就是我在 View 中执行此操作的方式
@Html.DropDownList("Last Ten Years", (IEnumerable<SelectListItem>)ViewBag.LastTenYears, "Select A Year")
并在您的操作
List<int> last10Years = new List<int>();
int currentYear = DateTime.Now.Year;
for (int i = currentYear - 10; i < currentYear; i++)
{
last10Years.Add(i);
}
ViewBag.LastTenYears = new SelectList(last10Years);
您可以观看演示 here
根据您的评论,请在下面找到我更新的答案。
我首先创建一个我们将在 View 中使用的Model
类。在这个模型类中,您可以拥有适当的属性。目前我们只使用 SelectlistItem
所以我们的类看起来像
public class ViewModel
{
public IEnumerable<SelectListItem> LastTenYears { get; set; }
}
然后在我们的 Controller 中我们可以创建一个方法来为我们的下拉列表提供信息。
public IEnumerable<SelectListItem> GetLastTenYears()
{
List<SelectListItem> ddl = new List<SelectListItem>();
int currentYear = DateTime.Now.Year;
for (int i = currentYear - 10; i < currentYear; i++)
{
ddl.Add(new SelectListItem { Text = i.ToString(), Value = i.ToString() });
}
IEnumerable<SelectListItem> lastTenYears = ddl;
return lastTenYears;
}
现在我们想要将此数据传递给 View 。为了论证起见,我将使用 Index
作为 View ,但您可以将其传递给您喜欢的任何 View 。因此,我们将 Index
操作更改为
public ActionResult Index()
{
ViewModel viewModel = new ViewModel();
viewModel.LastTenYears = GetLastTenYears(); //get the drop down list
return View(viewModel); //we're passing our Model to the view
}
最后,我们希望确保我们的 View 知道要使用哪个 Model
,因此我们将在 Index.cshtml
文件的开头执行以下操作
@model YourNameSpace.ViewModel
我们的 DropDownList
辅助方法现在将更改为指向 Model
类中的属性
@Html.DropDownList("Last Ten Years", Model.LastTenYears, "Please select a year")
关于c# - ASP.net MVC 5 Razor 下拉框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41224512/