ASP.Net MVC DropDownList绑定到可为null的字段
本文关键字:null 字段 Net MVC DropDownList 绑定 ASP | 更新日期: 2023-09-27 18:20:34
我有一个下拉列表。它不是必需的,因此backing字段可以为null。但是,当表单加载时,下拉列表似乎将所选值设置为第一个id(按顺序排列)。
我构建了这样的选择列表项目:
var servers = await Context.Servers.OrderBy(s => s.Name).ToListAsync();
servers.Insert(0, new Models.Server() { Id = Guid.Empty, Name = "SELECT ONE" });
return servers.Select(t => new SelectListItem()
{
Selected = t.Id == Guid.Empty ? true : false,
Text = t.Name,
Value = t.Id.ToString()
});
我把它渲染成这样:
@Html.DropDownListFor(m => m.ProductionEnvironment_ServerId, Model.ProductionEnvironment_Servers)
如果ServerId为null,则选择ID字段中的第一个连续Guid。如果我使ServerId不可为null,则需要下拉列表,而不应该是。
在GET操作方法中,将视图模型的ProductionEnvironment_ServerId
属性值设置为呈现下拉列表时要选择的值。
public ActionResult Edit()
{
var vm = new YourViewModel(int id);
vm.ProductionEnvironment_Servers = servers.Select(s => new SelectListItem
{
Value = s.Id.ToString(),
Text = s.Name
});
//Set the value you want to be selected.
Guid guidWhichShouldBeSelected = GetSelectedGuidHereFromSomeWhere(id);
vm.ProductionEnvironment_ServerId = guidWhichShouldBeSelected;
return View(vm);
}
此外,在剃刀视图中,您可以使用辅助对象方法的此覆盖将"选择"选项添加到选项列表中。您不需要从服务器端添加一个。
@Html.DropDownListFor(m => m.ProductionEnvironment_ServerId,
Model.ProductionEnvironment_Servers,"Select")
这将添加"Select
"选项作为第一个选项。
提交表单时,在HttpPost
操作方法中,检查已发布模型的ProductionEnvironment_ServerId
属性的值。如果他们选择了第一个"选择"选项,您将获得所选项目的值(Guid)或null。
[HttpPost]
public ActionResult Edit(YourViewModel model)
{
//check model.ProductionEnvironment_ServerId
// to do : Save and Redirect
}