我希望在回发后保留我的值,所以我将值传递给控制器中的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是空的。有没有办法解决这个问题?
答案 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,它包含视图所需的所有信息,并以这种方式传递。