未选择 Razor Pages SelectListItem
Razor Pages SelectListItem not selected
我正在处理一个 ASP.net Razor 页面,但 select-list 的标签助手有问题。
特别是 SelectListItem 的 selected-属性。
我从我的数据库中获得了操作系统列表,其中一个是通过 DeviceId 分配给设备的。
当我启动页面时,我假设有“devicebound”操作系统 selected。设备 ID 由 OnGet 方法的参数通过 int id 发布。
这是检查设备是否绑定了操作系统的代码。它将 return 操作系统的 db-id。
var SelectedOperatingSystemId = await _context.LicenseRelationships
.Include(lr => lr.License)
.ThenInclude(l => l.Software)
.Where(lr => lr.DeviceMetaDataId == id)
.Select(x => x.License.Software.Id)
.SingleOrDefaultAsync();
这是调试器的输出:
之后,我用这段代码创建了一个 IEnumerable:
OpertaingSystemsList = await _context.Softwares
.Where(s => s.IsOperatingSystem == true)
.OrderBy(s => s.Name)
.Select(s => new SelectListItem
{
Value = s.Id.ToString(),
Text = s.Name,
Selected = s.Id == SelectedOperatingSystemId
})
.ToListAsync();
因此,当 db-id 等于变量 SelectedOperatingSystemId 的一个时,select 的选项应该被 selected。这是调试器的正确输出,也是我的假设:
但这是页面的呈现代码。值 2 应该 selected:
那是 Html 标记:
<div class="form-group">
<label asp-for="OperatingSystemId"></label>
<select asp-for="OperatingSystemId" asp-items="Model.OpertaingSystemsList" class="form-control">
<option value="">Betriebssystem wählen</option>
</select>
</div>
我无法解释这种行为。这可能是一个错误吗?或者有人看到我的编程有错误吗?
谢谢,帕特里克
天哪!解决方案很简单,但记录最差。
在 Razor Pages 中,不再使用 SelectListItem 属性 Selected。
您需要做的是将 selected 值分配给 属性 您在 Select 列表中用于 asp-for
的 属性。
这是你的 属性:
[BindProperty]
public int OperatingSystemId { get; set; }
你的 Select 在它的 asp 中消耗了它,而这个 属性 你必须分配 selected 值,在我的例子中,这是在代码代码:
OperatingSystemId = await _context.LicenseRelationships
.Include(lr => lr.License)
.ThenInclude(l => l.Software)
.Where(lr => lr.DeviceMetaDataId == id)
.Select(s => s.License.Software.Id)
.SingleOrDefaultAsync();
最后 select 标记必须如下所示:
<label asp-for="OperatingSystemId"></label>
<select asp-for="OperatingSystemId" asp-items="Model.OpertaingSystemsList">
<option value="">Choose Operating System</option>
</select>
我希望这也能帮助任何疯狂的人
我正在处理一个 ASP.net Razor 页面,但 select-list 的标签助手有问题。 特别是 SelectListItem 的 selected-属性。
我从我的数据库中获得了操作系统列表,其中一个是通过 DeviceId 分配给设备的。
当我启动页面时,我假设有“devicebound”操作系统 selected。设备 ID 由 OnGet 方法的参数通过 int id 发布。
这是检查设备是否绑定了操作系统的代码。它将 return 操作系统的 db-id。
var SelectedOperatingSystemId = await _context.LicenseRelationships
.Include(lr => lr.License)
.ThenInclude(l => l.Software)
.Where(lr => lr.DeviceMetaDataId == id)
.Select(x => x.License.Software.Id)
.SingleOrDefaultAsync();
这是调试器的输出:
之后,我用这段代码创建了一个 IEnumerable:
OpertaingSystemsList = await _context.Softwares
.Where(s => s.IsOperatingSystem == true)
.OrderBy(s => s.Name)
.Select(s => new SelectListItem
{
Value = s.Id.ToString(),
Text = s.Name,
Selected = s.Id == SelectedOperatingSystemId
})
.ToListAsync();
因此,当 db-id 等于变量 SelectedOperatingSystemId 的一个时,select 的选项应该被 selected。这是调试器的正确输出,也是我的假设:
但这是页面的呈现代码。值 2 应该 selected:
那是 Html 标记:
<div class="form-group">
<label asp-for="OperatingSystemId"></label>
<select asp-for="OperatingSystemId" asp-items="Model.OpertaingSystemsList" class="form-control">
<option value="">Betriebssystem wählen</option>
</select>
</div>
我无法解释这种行为。这可能是一个错误吗?或者有人看到我的编程有错误吗? 谢谢,帕特里克
天哪!解决方案很简单,但记录最差。 在 Razor Pages 中,不再使用 SelectListItem 属性 Selected。
您需要做的是将 selected 值分配给 属性 您在 Select 列表中用于 asp-for
的 属性。
这是你的 属性:
[BindProperty]
public int OperatingSystemId { get; set; }
你的 Select 在它的 asp 中消耗了它,而这个 属性 你必须分配 selected 值,在我的例子中,这是在代码代码:
OperatingSystemId = await _context.LicenseRelationships
.Include(lr => lr.License)
.ThenInclude(l => l.Software)
.Where(lr => lr.DeviceMetaDataId == id)
.Select(s => s.License.Software.Id)
.SingleOrDefaultAsync();
最后 select 标记必须如下所示:
<label asp-for="OperatingSystemId"></label>
<select asp-for="OperatingSystemId" asp-items="Model.OpertaingSystemsList">
<option value="">Choose Operating System</option>
</select>
我希望这也能帮助任何疯狂的人