我有一个下拉列表,用户可以在其中选择护理提供者。在数据库中,此值为null
但是在应用程序中,选择了一个值。如果null
值显示为空白,我需要做什么?我认为这是默认行为。我更改为在视图模型中使用强类型列表而不是视图包,这可能在那时已经破坏。
以下是视图标记:
<div class="editor-label">
@Html.LabelFor(model => model.PsychologistId, "Psychologist")
</div>
<div class="editor-field">
@Html.DropDownListFor(x => x.PsychologistId, Model.ListPsychologists)
@Html.ValidationMessageFor(model => model.PsychologistId)
</div>
以下是视图模型中的属性:
[DisplayName("Psychologist")]
public Nullable<int> PsychologistId { get; set; }
以下是我的控制器的相关部分:
model.ListPsychologists = new SelectList(XXX, "Id", "DisplayName");
return this.View(model);
其中XXX只是带有过滤和排序标准的LINQ表达式。为了清晰和空间,它被省略了。
从控制器传递到视图的模型PsychologistId
为null
。 SelectedValue
上的model.ListPsychologists
属性为null
。
答案 0 :(得分:1)
如果PsychologistId是一个int,它会为它赋值0,因为int不是可空类型。
如果我的上述假设不正确,请显示您的模型和控制器。
答案 1 :(得分:0)
您的SelectList是否包含Id==null
的条目?我不信。这意味着您将没有与您的值匹配的选择列表条目,因此浏览器将选择第一个可用的。
解决方案:使用Id = null
向您的SelectList显式添加条目。
答案 2 :(得分:0)
之前我遇到过这些问题,而我所做的就是在viewmodel中发送我想要填充下拉列表的基本集合,而不是SelectList。所以:
model.ListPsychologists = XXX;
然后在视图中:
@Html.DropDownListFor(x => x.PsychologistId, new SelectList(Model.ListPsychologists, "Id", "DisplayName", Model.PsychologistId))
请验证我在MSDN中使用的SelectList构造函数重载,我是从内存中输入的。基本上你给它在SelectList中使用的项目集合,然后是文本和值属性的名称(就像你在动作方法代码中所做的那样),第四个参数是设置下拉列表的值。 / p>
编辑:此外,DropDownListFor会在菜单中添加默认项目。比如,“选择一个”。