未选择 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。

看这里:LearnRazorPages.com

您需要做的是将 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>

我希望这也能帮助任何疯狂的人