使用不同的默认值在MVC View中重用SelectList

时间:2016-01-25 11:59:47

标签: c# asp.net-mvc razor html.dropdownlistfor

我有一个SelectList用于填充视图中的下拉列表,为类别提供1到5的分数。有7个类别,都可以有单独的分数。

我已经成功创建了一个视图,它将SelectList显示为每个项目的下拉列表,并在我创建新对象时为该类别指定所选值 - 但我正在努力相应的编辑视图。

我认为最好再次重复使用下拉列表,并将默认值设置为适用类别的数据库中的值。但是,似乎无法在视图中设置默认值 - 只能在首次创建SelectList时设置默认值。

我按如下方式创建了SelectList

model.ScoreOptionsSelectList = _tl_RangeService.List()
    .Select(s => new SelectListItem
    {
        Text = s.CustSatRange,
        Value = s.CustSatRange
    })
    .ToList();

_tl_RangeService.List()返回的项目列表中包含定义CustSatRange的唯一值的项目(就本例而言,这些数字的范围是1到5)。

然后我在视图中使用它

<td class="@item.LatestScoreStyle">
    @Html.DropDownListFor(
        model => model.Manage_Rating, 
        Model.ScoreOptionsSelectList, 
        null, 
        new { @id = "ddlScores" + @rowIndex, @class = "form-control" })
</td>

我尝试将默认值设置为当前Manage_Rating,因此在提交表单时会更新Manage_Rating

目前呈现如下。除管理之外还有许多其他类别将使用相同的SelectList来填充下拉列表。请注意,“调查类型”正在成功运行,因为它是仅适用于单个类别的SelectList。

enter image description here

有没有办法创建一个SelectList来重复使用以填充下拉列表,但是在视图中创建每个实例时,为每个实例设置不同的默认值?或者我是否被迫为每个类别创建一个新的SelectList?

您可以提供的任何建议都表示赞赏

修改

所以经过一整天的搔痒(因此这里的问题),当我试图提供进一步的澄清时,我发现我犯了一个菜鸟错误,并没有在第一个设置Managment_Rating地点。 D'哦!

因此,这是一个错字,我投票结束这个问题。

感谢那些试图帮助我的人。抱歉浪费你的时间。

2 个答案:

答案 0 :(得分:0)

简单地说,在局部视图中创建一个选择列表并重复使用它。 要设置默认值,请将默认值作为参数

传递给局部视图

forexample:

@Html.Partial("YourPartialView", new ViewDataDictionary({ defaultValue : yourvalue }))

答案 1 :(得分:0)

您可以重复使用ScoreOptionsSelectList来填充多个下拉列表,如下所示:

创建模型时填充类别默认值。由于这是Edit视图,因此在检索要编辑的记录后,您将从数据库中填充这些视图。我使用了一个简单的例子用于演示目的:

model.category1 = 1;
model.category2 = 2;
model.category3 = 3;
model.category4 = 4;

在视图中,您使用创建控件,使用相同的对象填充下拉列表:

@Html.DropDownListFor(model => model.category1,  Model.ScoreOptionsSelectList) 
@Html.DropDownListFor(model => model.category2,  Model.ScoreOptionsSelectList)
@Html.DropDownListFor(model => model.category3,  Model.ScoreOptionsSelectList)
@Html.DropDownListFor(model => model.category4,  Model.ScoreOptionsSelectList)

model属性指示呈现控件的名称,因此指定POSTed时将绑定的字段。 Model.ScoreOptionsSelectList只是创建下拉列表的原始数据,因此无需进行多个数据库调用来填充它们,因为它们完全相同。