我相信这应该很容易。但我无法让自己尝试自己和谷歌搜索一天: - (
我使用的表格如下(见下文)。它包含字段ST_ID和字段ST_BELONGSTO。这实际上是存储我正在寻找的层次结构。因此,如果一行中有一个其他值,则在字段ST_belongsto中为零,这意味着它是topone的子类别。
CREATE TABLE [dbo].[tblDropdown](
[ST_ID] [int] IDENTITY(1,1) NOT NULL,
[ST_CODE] [nvarchar](50) NULL,
[ST_DESCRIPTION] [nvarchar](50) NULL,
[ST_VALUE] [nvarchar](50) NULL,
[ST_ACTIVE] [bit] NULL,
[ST_BELONGSTO] [int] NULL,
CONSTRAINT [PK_tblDropdown] PRIMARY KEY CLUSTERED
(
[ST_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
我通过控制器用
填充视图中的下拉列表ViewBag.ST_BELONGSTO = new SelectList(db.tblDropdown.Where(p => p.ST_CODE == "AR_GROUP1" && (p.IS_COMPANY == 0 || p.IS_COMPANY == i && p.ST_ACTIVE == true)), "ST_ID", "ST_DESCRIPTION");
这很好用。它显示了al记录。你认为有什么问题:-)。我想获得一个带有层次结构的下拉列表,因此它不会只显示值列表,例如
Categorie 1
-->Subcat 2
-->Subcat 5
Categorie2
-->Subcat 8
-->Subcat 7
等等......
我找到了OPTGROUP,但这是不可行的,因为这些组也有可选择的ID。
我也在下面尝试过linq查询,但这只显示了具有子记录的记录。并没有显示子记录。
var topics = db.tblDropdown;
var types = db.tblDropdown;
var query = from topic in topics
join type in types on topic.ST_ID equals type.ST_BELONGSTO
select new { Group = type.ST_ID, ID = topic.ST_ID, Description = topic.ST_DESCRIPTION };
ViewBag.ST_BELONGSTO = new SelectList(query, "ID", "Description", "Group");
在视图中,下拉列表看起来像
<div class="list-left">
@SeaFuy.ResourceProviders.LocalizationResourceProvider.Current.GetString("RE_TYPE1")
</div>
<div class="list-right">
@Html.DropDownList("ST_BELONGSTO", String.Empty)
@Html.ValidationMessageFor(model => model.ST_BELONGSTO)
</div>
任何帮助都将深受赞赏
最好的问候,Marcel