gpt4 book ai didi

asp.net-mvc-3 - DropDownListFor - 模型绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 07:03:45 25 4
gpt4 key购买 nike

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

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

下面生成了一个空值错误,因此我遗漏了一些明显的东西,任何帮助将不胜感激。

这是我所拥有的:

Controller :

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"))

最佳答案

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

让我们首先修复 View 模型:

public class MyModelObject
{
public string StartTime { get; set; }
public IEnumerable<SelectListItem> AvailTimes { get; set; }
}

然后 Controller 操作将提供给 View 模型:

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);
}

最后是强类型 View :

@model MyModelObject
@Html.DropDownListFor(x => x.StartTime, Model.AvailTimes)

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

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" },
};
}
}
}

现在你的 Controller 操作可能会变成:

public ActionResult Index()
{
var model = MyModelObject();
return View(model);
}

并且 View 显然保持不变。

关于asp.net-mvc-3 - DropDownListFor - 模型绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8740419/

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