我的第一个MVC项目,并遇到了一个问题,我希望有人可以帮助。
基本上,我有一个DropDownListFor对象,我希望填充一个可用时间列表,供用户从中选择并将所选项目存储在一个属性中,供以后使用。
下面是一个空值错误,所以我错过了一些明显的东西,任何帮助都将不胜感激。
我现在拥有的是:
控制器:
private MyModelObject m_model = new MyModelObject();
public ActionResult Index()
{
var AvailTimes = new SelectList(new[]
{
new {Value="00:00",Text="12:00 AM"},
new {Value="00:30",Text="12:30 AM"},
new {Value="01:00",Text="1:00 AM"},
new {Value="22:30",Text="10:30 PM"},
new {Value="23:00",Text="11:00 PM"},
new {Value="23:30",Text="11:30 PM"},
});
return View(m_model);
}模型:
public class MyModelObject
{
public string StartTime { get; set; }
public IEnumerable<SelectList> AvailTimes { get; set; }
}视图:
@Html.DropDownListFor(model => model.StartTime,
new SelectList(model.AvailTimes, "Value", "Text"))发布于 2012-01-05 09:52:07
不要使您的模型成为控制器的私有变量。每次发送请求时,都会创建一个新的控制器实例,因此不要认为您将能够在操作之间重用它。而且,您似乎没有对您在操作中声明的AvailTimes局部变量做任何有用的事情,并且它受到快速垃圾收集的限制。而且你的模型是不正确的。AvailTimes属性必须是IEnumerable<SelectListItem>而不是IEnumerable<SelectList>。
让我们首先修复视图模型:
public class MyModelObject
{
public string StartTime { get; set; }
public IEnumerable<SelectListItem> AvailTimes { get; set; }
}然后,将提供视图模型的控制器操作:
public ActionResult Index()
{
var model = MyModelObject
{
AvailTimes = new[]
{
new SelectListItem { Value = "00:00", Text = "12:00 AM" },
new SelectListItem { Value = "00:30", Text = "12:30 AM" },
new SelectListItem { Value = "01:00", Text = "1:00 AM" },
new SelectListItem { Value = "22:30", Text = "10:30 PM" },
new SelectListItem { Value = "23:00", Text = "11:00 PM" },
new SelectListItem { Value = "23:30", Text = "11:30 PM" },
}
};
return View(model);
}最后,强类型视图:
@model MyModelObject
@Html.DropDownListFor(x => x.StartTime, Model.AvailTimes)您还可以在视图模型中直接分配这些可用时间:
public class MyModelObject
{
public string StartTime { get; set; }
public IEnumerable<SelectListItem> AvailTimes
{
get
{
return new[]
{
new SelectListItem { Value = "00:00", Text = "12:00 AM" },
new SelectListItem { Value = "00:30", Text = "12:30 AM" },
new SelectListItem { Value = "01:00", Text = "1:00 AM" },
new SelectListItem { Value = "22:30", Text = "10:30 PM" },
new SelectListItem { Value = "23:00", Text = "11:00 PM" },
new SelectListItem { Value = "23:30", Text = "11:30 PM" },
};
}
}
}现在,您的控制器操作可以变成:
public ActionResult Index()
{
var model = MyModelObject();
return View(model);
}视图显然保持不变。
发布于 2012-01-05 09:51:39
Model.AvailTimes的值从不赋值,因此默认为null。
https://stackoverflow.com/questions/8740419
复制相似问题