在我的主页上,我有一个搜索表单,人们可以搜索房屋。它会重定向到控制器和操作,搜索房屋并在视图中显示它们。
在结果视图中,我有几个这样的列表。
<select name="priceFrom">
<option value="0">€0</option>
<option value="100000">€100.000</option>
<option value="200000">€200.000</option>
</select>
视图包含一个模型:@model Irrelevant.Namespace.ViewModels.SearchResults
我想选择他们在主页上选择的值,它存储在SearchResults ViewModel中。在我曾经做过Bind()
或Eval()
的WebForms中,MVC中有没有提供一种干净的方法来实现这个目标?
答案 0 :(得分:2)
SelectListItem
有一个Selected
属性,Html.DropDownListFor<>()
会尊重该属性。
如果您手动为selects
声明标记,最终会得到一个功能强大但不那么优雅的解决方案,例如:
<select name="priceFrom">
<option value="0">€0</option>
<option value="100000" @(Model.SomeCondition ? "selected" : "" )>€100.000</option>
<option value="200000" @(Model.SomeCondition ? "selected" : "" )>€200.000</option>
</select>
请记住,selected
属性的存在可能会导致用户代理视为“真实”。
理想情况下,您的所有下拉列表都将从您的视图模型中生成。创建视图模型后,您将评估先前的条件(例如在另一页上的选择)并在相应项目上设置Selected
。
答案 1 :(得分:2)
您必须为所有选项执行以下操作
<select name="priceFrom">
<option value="0" @(Model.PriceFrom.ToString().Equals("0") ? "selected":"")>€0</option>
<option value="100000" @(Model.PriceFrom.ToString().Equals("100000") ? "selected":"")>€100.000</option>
...
</select>
MVC中还有一种方法可以利用@Html.DropDownListFor
方法,您需要在模型中拥有一个list属性,该属性可以直接绑定到具有指定选定值的Dropdownlist