【发布时间】:2017-06-13 09:53:13
【问题描述】:
我看到了一些与我的问题相似的问题,但我还不能确定我的问题 - 所以我希望有人遇到同样的问题或知道如何最好地解决这个问题。
我有一个来自数据库的 SelectedItemList 位置。它返回 Locations 列表,主要是城市,但也列出了一些国家/地区。此列表将显示为这样;
Australia
Melbourne
Perth
Sydney
Bermuda
Canada
Calgary
Toronto
Vancouver
列表中的所有项目都有一个Id和Text属性,任何属于国家的城市都有一个ParentLocation_Id属性,对应国家的Id(澳大利亚是8,所以悉尼和珀斯的“ParentLocation_Id”为 8 等) 所以我知道这是我将用于定位列表中的那些项目的条件,以便缩进正确的项目。
我想使用@Html.DropDownListFor() 方法并能够定位国家以缩进它们,因此列表会像这样出现在选择列表中;
但我想知道是否有一种更简洁的方法可以通过使用 HTML 扩展来做到这一点。以前有人试过吗?
到目前为止,我已经通过这种方式管理了它,但是你可以看到它看起来很可怕:(
<select id="SelectedLocation" name="SelectedLocation">
@{
foreach (var location in Model.Locations)
{
if (location.Item.ParentLocation != null && location.Item.ParentLocation.Id != null)
{
<option value="@location.Item.Id" class="styled"> @location.Item.Text</option>
}
else
{
<option value="@location.Item.Id" class="styled">@location.Item.Text</option>
}
}
}
</select>
甚至可能这是实现此 UI 的唯一方法,但我很想知道是否有人想出更好的方法来处理这个问题。
谢谢!
【问题讨论】:
-
AFAIK,当你使用普通的
Select时,你做对了。如果您想要更高级的渲染,可能是时候切换到自定义控件了。 -
您希望能够选择澳大利亚(及其城市)吗?
-
是的@StephenMuecke,列表中的所有项目都是可选的。
-
您可以编写一个扩展方法,但除非您对“缩进”下拉列表有多种用途,否则这将是一种矫枉过正的做法。您可以始终将该代码放在部分(或
EditorTempate)中,但您当前的代码缺少正确的双向绑定和客户端验证所需的代码。 -
如果我设法确定缩进的下拉列表,我会在很多地方使用它——所以为了减少丑陋代码的数量,我几乎肯定会把它移到部分并修复绑定/验证问题。该列表也并非详尽无遗,因此为了保证该列表的可读性,我认为最好不要做我目前所做的事情!
标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor