我想知道如何:
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")
请有人告诉我该怎么做。
答案 0 :(得分:0)
您可以做的是将下拉列表的value
设置为自定义格式,然后您可以解析该格式以查看其类型。一个建议是在id
前加上一个字母来表示该类型。例如:C23
或L46
拥有一个包含两个列表的模型和一个选择值的属性:
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.
}
}