我们可以使用两个表格

时间:2015-12-24 10:41:47

标签: c# asp.net-mvc linq html.dropdownlistfor

我想知道如何:

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")

请有人告诉我该怎么做。

1 个答案:

答案 0 :(得分:0)

您可以做的是将下拉列表的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.
    }
}