Asp.net core 如何将模型绑定到具有结果过滤功能的dropdownlist输入?

Asp.net core 如何将模型绑定到具有结果过滤功能的dropdownlist输入?,asp.net-core,Asp.net Core,我想在asp.net核心中设计一个表单,它有一个dropdownlist。我想将一个模型绑定到这个下拉列表中,该模型的所有列都显示在下拉列表中,用户可以选择一行并过滤结果 asp.net核心、css或js中是否有此功能 这是我的模型:Company.cs public class Company { public int Id { get; set; } public string CompanyCode { get; set; } public string Compan

我想在asp.net核心中设计一个表单,它有一个dropdownlist。我想将一个模型绑定到这个下拉列表中,该模型的所有列都显示在下拉列表中,用户可以选择一行并过滤结果

asp.net核心、css或js中是否有此功能

这是我的模型:Company.cs

public class Company
{
   public int Id { get; set; }

   public string CompanyCode { get; set; }

   public string CompanyName { get; set; }

   public string SubCompanyName { get; set; }
 }
这是我的表单视图:Insert.cshtml

<form asp-action="Insert">
    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    <div class="form-group">
        <input asp-for="ErrorReportCode" class="form-control" , placeholder="RequestCode" id="txtErrorReportCode" />
        <span asp-validation-for="ErrorReportCode" class="text-danger"></span>
    </div>
    <div class="form-group">
        <input asp-for="ErrorReportDateReport" class="form-control datePicker" type="text" id="txtErrorReportDateReport" placeholder="RequestDate" />
        <span asp-validation-for="ErrorReportDateReport" class="text-danger"></span>
    </div>

    <div class="form-group">
        @Html.DropDownListFor< ????? >

    </div> 
    <div class="form-group">
        <input type="submit" value="Insert" class="btn-red pull-left" />
    </div>
</form>

@Html.DropDownListFor<???????>
我想在我的表单中有一个下拉列表,用户可以根据其规范选择一个公司,如CompanyCode、CompanyName和SubcompanyName。换句话说,我想要一个多列的下拉列表

此外,当用户在此下拉列表的文本区域中键入一个单词时,显示结果将在公司表中动态更改。事实上,数据将被过滤


首先,dropdownlist值不能绑定模型。我认为绑定公司Id是一个不错的选择。如果您想显示多个列,可以将它们放在选项值中。 下面是一个演示(我使用假数据进行测试):

行动

public IActionResult Insert() {
            List<Company> l = new List<Company> { new Company {  Id=1, CompanyCode="c1", CompanyName="company1", SubCompanyName="subcompany1"},
                new Company { Id = 2, CompanyCode = "c2", CompanyName = "company2", SubCompanyName = "subcompany2" },
            new Company {  Id=3, CompanyCode="c3", CompanyName="company3", SubCompanyName="subcompany3"}};
            List<SelectListItem> l1 = new List<SelectListItem>();
            foreach(Company c in l) {    
                l1.Add(new SelectListItem { Text = c.CompanyCode + " | " + c.CompanyName + " | " + c.SubCompanyName, Value = c.Id + "" });
            }
            ViewBag.Select = l1;
            return View();
        }
public IActionResult Insert(){
列表l=新列表{new Company{Id=1,CompanyCode=“c1”,CompanyName=“company1”,SubCompanyName=“subcompany1”},
新公司{Id=2,CompanyCode=“c2”,CompanyName=“company2”,SubCompanyName=“subcompany2”},
新公司{Id=3,CompanyCode=“c3”,CompanyName=“company3”,SubCompanyName=“subcompany3”};
列表l1=新列表();
foreach(l中的c公司){
l1.Add(新建SelectListItem{Text=c.CompanyCode+“|”+c.CompanyName+“|”+c.SubCompanyName,Value=c.Id+”});
}
ViewBag.Select=l1;
返回视图();
}
视图:


@foreach(ViewBag.Select中的变量i)
{
@i、 正文
}
结果:

如果你喜欢更好的风格,你可以找一些第三插件。 更新(在数据列表中添加
CompanyCode | CompanyName | SubCompanyName
):


公司代码|公司名称|子公司名称
@foreach(ViewBag.Select中的变量i)
{
@i、 正文
}
结果:

更新2: 您还可以使用占位符: 视图:


@foreach(ViewBag.Select中的变量i)
{
@i、 正文
}
结果:


谢谢你的帮助。有没有办法在列表的顶部放一个标题行来指定每一列的名称?非常感谢。我是网页设计的初学者,你能解释更多吗?这种类型的标题考虑列表中的一项,当搜索一个单词时,如果标题包含这个单词,标题显示在过滤的搜索列表中,如果不是,标题不显示。我可以有一个固定的标题行,它不是列表中的一个项目吗?你可以尝试使用占位符,我已经用它更新了我的答案。
 <input type="text" list="cars" />
            <datalist id="cars">
                @foreach (var i in ViewBag.Select)
                {
                    <option id=@i.Value>@i.Text</option>
                }
            </datalist>
<input type="text" list="cars" />
            <datalist id="cars">
                <option>CompanyCode | CompanyName | SubCompanyName </option>
                @foreach (var i in ViewBag.Select)
                {
                    <option id=@i.Value>@i.Text</option>
                }

            </datalist>
<input type="text" list="cars" placeholder="CompanyCode | CompanyName | SubCompanyName"  style="width:400px"/>
            <datalist id="cars">
                @foreach (var i in ViewBag.Select)
                {
                    <option id=@i.Value>@i.Text</option>
                }
            </datalist>