0

我有一个下拉列表,用户可以在其中选择护理提供者。在数据库中,此值null在应用程序中,但选择了一个值。我需要做什么才能使该null值显示为空白?我认为这是默认行为。我改为在我的视图模型中使用强类型列表而不是 viewbag,这可能在当时已经损坏。

这是视图标记:

<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 表达式。为了清晰和空间,它被省略了。

从控制器传递到视图的模型PsychologistIdnull. 上的SelectedValue属性model.ListPsychologistsnull

4

3 回答 3

1

如果 PsychologistId 是一个 int,它将为其分配 0 值,因为 int 不是可为空的类型。

如果我上面的假设不正确,请显示您的模型和控制器。

于 2012-07-25T18:12:10.953 回答
0

您的 SelectList 是否包含带有 的条目Id==null?我不信。这意味着您将没有与您的值匹配的选择列表条目,因此浏览器将选择第一个可用的条目。

解决方案:将条目显式添加Id = null到您的 SelectList。

于 2012-07-25T18:35:01.337 回答
0

我以前遇到过这些问题,我解决它的方法是发送我想要在视图模型中填充下拉列表的基本集合,而不是 SelectList。所以:

model.ListPsychologists = XXX;

然后在视图中:

@Html.DropDownListFor(x => x.PsychologistId, new SelectList(Model.ListPsychologists, "Id", "DisplayName", Model.PsychologistId))

请验证我在 MSDN 中使用的 SelectList 构造函数重载,我是从内存中输入的。基本上,你给它一个要在 SelectList 中使用的项目集合,然后是文本和值属性的名称(就像你在操作方法代码中所做的那样),第四个参数是要设置下拉列表的值。

编辑:此外,DropDownListFor 有一个重载,可以在菜单中添加默认项。比如,“选择一个”。

于 2012-07-25T18:35:18.680 回答