gpt4 book ai didi

c# - ASP.net MVC 5 Razor 下拉框

转载 作者:行者123 更新时间:2023-11-30 21:43:54 24 4
gpt4 key购买 nike

嘿,我是 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")

在你的Action

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com