【发布时间】:2016-02-25 09:44:20
【问题描述】:
我正在尝试在 asp.net mvc 项目的 cshtml 视图页面中填充月份和年份
这是查看页面代码
@model IEnumerable<project.Models.ProductStatistics>
@{
}
@Html.DropDownList("ExpirationMonth", ExpirationMonthDropdown)
@Html.DropDownList("ExpirationYear", ExpirationYearDropdown)
这是模型
public class ProductStatistics
{
public IEnumerable<SelectListItem> ExpirationMonthDropdown
{
get
{
return Enumerable.Range(1, 12).Select(x =>
new SelectListItem()
{
Text = CultureInfo.CurrentCulture.DateTimeFormat.AbbreviatedMonthNames[x - 1] + " (" + x + ")",
Value = x.ToString(),
Selected = (x == Model.ExpirationMonth)
});
}
}
public IEnumerable<SelectListItem> ExpirationYearDropdown
{
get
{
return Enumerable.Range(DateTime.Today.Year, 20).Select(x =>
new SelectListItem()
{
Text = x.ToString(),
Value = x.ToString(),
Selected = (x == Model.ExpirationYear)
});
}
}
}
但在这里我在模型类中遇到以下错误
当前上下文中不存在名称“模型”
在查看页面中也出现此错误
当前上下文中不存在名称“ExpirationMonthDropdown”
【问题讨论】:
-
这段代码有很多问题。第一个错误很明显:您在
ProductStatistics方法中访问Model,但那里不存在。Model仅作为成员变量存在于视图中。第二个错误是因为你的视图模型是IEnumerable<albaraka.Models.ProductStatistics>,所以即使你使用Model.ExpirationMonthDropdown,它也不起作用,因为enumerable != 1。请显示一些更相关的代码。 -
@CodeCaster 我需要将
ExpirationMonthDropdown和ExpirationYearDropdown方法移动到控制器方法 -
不,您需要显示更多代码,例如定义
ExpirationMonth和ExpirationYear的位置。 -
第一个错误是由您的行
Selected = (x == Model.ExpirationMonth)(x2) 引发的,因为您的模型不包含属性名称Model。但是由于您绑定到属性名称ExpirationMonth,所以无论如何它都会被忽略,所以只需删除它。 -
第二个错误是因为您没有在名为
ExpirationMonthDropdown和ExpirationYearDropdown的视图中定义IEnumerable<SelectListItem>属性 - 但是您在视图中使用@model IEnumerable<project.Models.ProductStatistics>没有任何意义,因此无法理解你认为你想做什么
标签: c# asp.net-mvc linq asp.net-mvc-4 razor