0

我为下拉列表填充了以下代码。有什么办法可以在下面添加一个名为“选择值”的项目

private void PopulateCustStatus()
{
     ViewData["custStatus"] = new HEntities().COptions
         .Select(e => new ConfOptModel
             {
                 OptID = e.OptID,
                 OptName = e.OptName,
                 ConfigTypeID = e.ConfigTypeID
             })
         .Where(e => e.ConfigTypeID == 2)
         .OrderBy(e => e.OpName);
}
4

2 回答 2

0

您正在返回一个ConfOptModel对象列表,因此除非有一个属性指示“选定”值,否则您不能。

如果我不专门为视图创建模型(即使用域对象作为“模型”而不是“视图模型”),我通常会将所选项目添加到视图状态:

ViewData["selectedCustStatus"] = selectedID;

然后在标记中创建 DropDownList 时使用该值。

另一种选择是返回SelectListItem对象列表而不是域 ( ConfOptModel) 对象。这会在控制器中添加一些视图逻辑,因此请使用您更喜欢的那个。

于 2012-10-30T15:57:51.040 回答
0

我认为,您尝试做的问题在于您的“无选择”选项(例如“选择值”)与在PopulateCustStatus().

可能想使用IEnumerable<SelectListItem>:-

var selectList =
  new HEntities().COptions
    .Where(e => e.ConfigTypeID == 2)
    .OrderBy(e => e.OpName)
    .Select(e => new SelectListItem()
    {
      Text = e.OptName,
      Value = e.OptID,
      Selected = false 
    });

这为您提供了更多的灵活性。然后您可以在顶部插入一个“选择值”项,例如:-

var noSelection = new SelectListItem()
{
  Text = "Select value",
  Value = 0,
  Selected = true
};

ViewData["selectedCustStatus"] =
  new[] { noSelection }.Concat(selectList);

注意:如果要保留先前选择的值,则必须将其传递给函数并确保匹配SelectListItem项将其Selected属性设置为true.

希望这可以帮助!

于 2012-10-31T07:21:56.500 回答