我们可以用两个表的数据填充单个下拉列表吗

本文关键字:数据 填充 单个 下拉列表 两个 我们 | 更新日期: 2023-09-27 18:28:01

我想知道如何:

1> 使用两个表中的数据创建自定义列表数据存储在城市和位置表的数据库中。现在,我想用城市名称和地点名称填充下拉列表。

2> 假设完成了,那么如何区分它是城市id还是位置id,因为在城市名称选择时,我希望更新城市id列,而在位置选择时,位置id将在发布操作时在同一个表中更新。

3> 如果无法区分要更新的id,那么是否可以使用分组填充下拉列表,以便在第一组中仅显示城市名称,在第二组中仅指定位置名称。这篇文章里有这样的东西https://ole.michelsen.dk/blog/grouping-data-with-linq-and-mvc.html我读这篇文章是为了了解如何在下拉列表中使用它。

请帮帮我。我已经看到了几乎所有的堆栈溢出帖子,但不知道如何做到这一点。现在,我可以用这种方式用单个表填充下拉列表:

     public static List<City> allCity()
     {
        using (ApplicationDbContext db = new ApplicationDbContext())
        {
            return db.Cities.ToList();
        }
     }

在控制器中,在viewbag的帮助下发送此列表,如下所示:

   public ActionResult Index()
    {
        ViewBag.CityId = new SelectList(allCity(), "Id", "CityName");
        return View();
     }

在查看页面上,如下所示:

  @Html.DropDownList("Cities", ViewBag.CityId as SelectList, "Select a City")

请有人告诉我怎么做。

我们可以用两个表的数据填充单个下拉列表吗

您可以将下拉列表的value设置为自定义格式,然后您可以解析该格式以查看其类型。一个建议是在id前面加一个字母来表示类型。例如:C23L46

有一个包含两个列表的模型和选择值的属性:

class MyModel
{
     public List<City> Cities { get; set; }
     public List<Location> Locations { get; set; }
     public string SelectedValue { get; set; }
}

因此,在您的视图中,您可以创建这样的列表:

<select id="SelectedValue" name="SelectedValue">
@foreach(var city in Model.Cities)
{
    <option value="C@(city.ID)">@(city.Name)</option>
}
@foreach(var location in Model.Locations)
{
    <option value="L@(location.ID)">@(location.Name)</option>
}
</select>

然后,当你在控制器中收到值时,你可以做这样的事情:

[HttpPost]
public ActionResult Index(MyModel model)
{
    char inputType = model.SelectedValue[0];
    int id = int.Parse(model.SelectedValue.Substring(1));
    if(inputType == 'C')
    {
        // Insert City id.
    }
    else
    {
        // Insert Location id.
    }
}