尽管属性值为NULL,为什么我的MVC下拉列表会选择一个值?

时间:2012-07-25 18:09:11

标签: asp.net-mvc

我有一个下拉列表,用户可以在其中选择护理提供者。在数据库中,此值为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表达式。为了清晰和空间,它被省略了。

从控制器传递到视图的模型PsychologistIdnullSelectedValue上的model.ListPsychologists属性为null

3 个答案:

答案 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会在菜单中添加默认项目。比如,“选择一个”。