首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DropDownListFor -模型绑定

DropDownListFor -模型绑定
EN

Stack Overflow用户
提问于 2012-01-05 09:49:07
回答 2查看 11.4K关注 0票数 3

我的第一个MVC项目,并遇到了一个问题,我希望有人可以帮助。

基本上,我有一个DropDownListFor对象,我希望填充一个可用时间列表,供用户从中选择并将所选项目存储在一个属性中,供以后使用。

下面是一个空值错误,所以我错过了一些明显的东西,任何帮助都将不胜感激。

我现在拥有的是:

控制器:

代码语言:javascript
复制
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);
}

模型:

代码语言:javascript
复制
public class MyModelObject
{
    public string StartTime { get; set; }
    public IEnumerable<SelectList> AvailTimes { get; set; }
}

视图:

代码语言:javascript
复制
@Html.DropDownListFor(model => model.StartTime, 
                       new SelectList(model.AvailTimes, "Value", "Text"))
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-05 09:52:07

不要使您的模型成为控制器的私有变量。每次发送请求时,都会创建一个新的控制器实例,因此不要认为您将能够在操作之间重用它。而且,您似乎没有对您在操作中声明的AvailTimes局部变量做任何有用的事情,并且它受到快速垃圾收集的限制。而且你的模型是不正确的。AvailTimes属性必须是IEnumerable<SelectListItem>而不是IEnumerable<SelectList>

让我们首先修复视图模型:

代码语言:javascript
复制
public class MyModelObject
{
    public string StartTime { get; set; }
    public IEnumerable<SelectListItem> AvailTimes { get; set; }
}

然后,将提供视图模型的控制器操作:

代码语言:javascript
复制
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);
}

最后,强类型视图:

代码语言:javascript
复制
@model MyModelObject
@Html.DropDownListFor(x => x.StartTime, Model.AvailTimes)

您还可以在视图模型中直接分配这些可用时间:

代码语言:javascript
复制
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" },                 
             }; 
        }
    }
}

现在,您的控制器操作可以变成:

代码语言:javascript
复制
public ActionResult Index()
{
    var model = MyModelObject();
    return View(model);
}

视图显然保持不变。

票数 12
EN

Stack Overflow用户

发布于 2012-01-05 09:51:39

Model.AvailTimes的值从不赋值,因此默认为null。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8740419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档