使用viewbag将前一个值传递给下拉列表

时间:2018-04-18 15:45:16

标签: c# html asp.net-mvc

我希望在回发后保留我的值,所以我将值传递给控制器​​中的ViewBag。 在我看来,我有类似

的东西
<select onchange="this.options[this.selectedIndex].value && (window.location = this.options[this.selectedIndex].value);" name="" id="" class="filter-select">
    <option selected value="">Topic</option>
    @{string selectedOption = ViewBag.previous;

        foreach (var topic in ViewBag.topicList)
        {
        <option value="/resources/categories/@topic" selected="@(selectedOption == topic ? "selected" : "")" >@topic</option>
        }
     }
</select>

然而,无论如何,所选值总是最终成为最后一个值。即使当viewbag是空的。有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果您将selected放入option,则无论是否为其指定值,都会将其注册为已选中。因此,如果符合您的条件,您应该只选择所选属性。

这样做的一种方法是:

<select onchange = "this.options[this.selectedIndex].value && (window.location = this.options[this.selectedIndex].value);" name="" id="" class="filter-select">
    <option value="">Topic</option>
    @{string selectedOption = ViewBag.previous;

        foreach (var topic in ViewBag.topicList)
        {
            <option value = "/resources/categories/@topic" @if(selectedOption == topic) { @Html.Raw("selected"); } >@topic</option>
        }
    }
</select>

正如最后一点,通常首选使用ViewBag之外的其他方法在Controller和View之间传递数据。我倾向于使用的方法是创建一个ViewModel,它包含视图所需的所有信息,并以这种方式传递。