asp.net-core - 在 Asp.Net Core 中使用 SelectList 创建视图时显示值而不是 id
问题描述
我正在开发 Asp.Net Core 应用程序。我有 4 个相关的表。
城市、街道、房屋和警报装置
该应用程序用于管理警报安装。
房子属于街道和城市,它们是相关的。House 具有 DoorNr 属性...
当我尝试创建新的警报安装时。它向我展示了我通过 ID 可用的房屋,但我需要它来显示完整地址。问题是房屋类只有 StreetId(来自 Street Class)和 DoorNr。我怎样才能让它显示完整的地址?
public partial class AlarmInstall
{
public int AlarmInstallId { get; set; }
public int HouseId { get; set; }
public string Model { get; set; }
public virtual House House { get; set; }
}
public partial class House
{
public House()
{
AlarmInstall = new HashSet<AlarmInstall>();
}
public int HouseId { get; set; }
public int StreetId { get; set; }
public string DoorNr { get; set; }
public int CityId { get; set; }
public virtual City City { get; set; }
public virtual Street Street { get; set; }
public virtual ICollection<AlarmInstall> AlarmInstall { get; set; }
}
public partial class Street
{
public Street()
{
House = new HashSet<House>();
}
public int StreetId { get; set; }
public string StreetName { get; set; }
public virtual ICollection<House> House { get; set; }
}
public partial class City
{
public City()
{
House = new HashSet<House>();
}
public int CityId { get; set; }
public string CityName { get; set; }
public virtual ICollection<House> House { get; set; }
}
我的 AlarmsInstallController 有以下代码:
// GET: AlarmInstalls/Create
public IActionResult Create()
{
ViewData["HouseId"] = new SelectList(_context.House, "HouseId", "HouseId");
return View();
}
// POST: AlarmInstalls/Create
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("AlarmInstallId,HouseId,Model")] AlarmInstall alarmInstall)
{
if (ModelState.IsValid)
{
_context.Add(alarmInstall);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
ViewData["HouseId"] = new SelectList(_context.House, "HouseId", "DoorNr", alarmInstall.HouseId);
return View(alarmInstall);
}
我的视图有以下代码:
<form asp-action="Create">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="HouseId" class="control-label"></label>
<select asp-for="HouseId" class ="form-control" asp-items="ViewBag.HouseId"></select>
</div>
这是我的 HouseId 选择列表...
ViewData["HouseId"] = new SelectList(_context.House, "HouseId", "HouseId");
我需要显示完整的地址,由 streetName(来自 StreetClass)和 DoorNr 组成,而不是 HouseId,我应该在我的代码中更改什么?
提前感谢您的帮助!!!
解决方案
在google的帮助下自己解决...
public IActionResult Create()
{
// ViewData["HouseId"] = new SelectList(_context.House, "HouseId", "HouseId");
var fullAddress = _context.House
.Select(h => new { HouseId = h.HouseId, FullAddress = h.Street.StreetName
+ ", " + h.DoorNr })
.ToList();
ViewBag.HouseId = new SelectList(fullAddress, "HouseId", "FullAddress");
推荐阅读
- sql - 我需要代码只显示 LAB_ORD.Order_Status 中的 F 和 C 不幸的是,代码无法识别此命令并显示 F、C、X、P
- google-cloud-platform - 如何获取有关 Google Scope ID 的信息?
- rundeck - 如何使用 CLI 更新 Rundeck 项目设置
- swift - 如何将视野降低到安全区域?
- html - 在不同的网络浏览器/屏幕尺寸上的不同响应(不适合移动设备)
- excel - 为什么我的搜索功能在重新排列以保存几张支票后需要更长的时间?
- rust - 如何通过 Vec
> 在 rusqlite 作为查询参数 - javascript - 重叠线上的传单折线和bringtofront
- linux - 完成枢轴根后如何绑定安装路径
- c++ - 如何获取文件关闭操作的错误信息