You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CSHTML文件RoomType下拉菜单不显示问题及房间状态设置咨询

问题解决:房型下拉菜单不显示及预订后房间状态设置

一、房型下拉菜单无法显示的排查与修复

从你提供的CSHTML代码和项目逻辑来看,下拉菜单不显示可从以下几个方向排查修复:

  1. 视图绑定语法错误
    你的下拉菜单代码中,asp-items="rooms"缺少@符号,ASP.NET Razor视图中引用变量必须加@,正确写法应为:
<select asp-for="RoomTypeId" asp-items="@rooms" class="form-control"></select>

不加@会导致视图无法识别rooms变量,下拉菜单无选项。

  1. 后端未正确传递ViewData数据
    检查控制器的AddBooking GET方法,是否从数据库查询房型数据并转换为List<SelectListItem>存入ViewData["RoomTypes"]。正确的后端代码示例:
public IActionResult AddBooking()
{
    var roomTypes = _context.RoomTypes
        .Select(r => new SelectListItem 
        { 
            Text = r.TypeName, // 假设RoomType模型有TypeName字段用于显示房型名称
            Value = r.Id.ToString() // 绑定RoomTypeId对应的值
        })
        .ToList();
    ViewData["RoomTypes"] = roomTypes;
    return View();
}

如果后端没有这段逻辑,rooms变量会为null,下拉菜单自然没有内容。

  1. 数据与模型匹配问题
  • 确认数据库RoomTypes表中存在有效数据,表为空的话下拉菜单也会无选项。
  • 检查Booking模型中的RoomTypeId属性是否存在,且类型与RoomType模型的Id类型一致(比如均为int),类型不匹配会导致绑定失败。
  • 检查ViewData键名是否完全一致:视图中用的是"RoomTypes",后端存入时键名需大小写一致。

二、预订后设置对应房间可用状态为false的实现

在预订提交的POST方法中,完成预订记录保存后,更新对应房间的状态,步骤如下:

  1. 确保模型关联正确
    Booking模型中需包含RoomTypeId和NumberOfRooms属性,用于接收用户选择的房型和预订数量。

  2. 在POST方法中更新房间状态
    修改控制器的AddBooking POST方法,添加房间状态更新逻辑:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> AddBooking(Booking booking)
{
    if (ModelState.IsValid)
    {
        // 1. 保存预订记录
        _context.Add(booking);
        await _context.SaveChangesAsync();

        // 2. 查询该房型下可用的房间,数量匹配预订数
        var availableRooms = _context.Rooms
            .Where(r => r.RoomTypeId == booking.RoomTypeId && r.Available == true)
            .Take(booking.NumberOfRooms)
            .ToList();

        // 3. 处理可用房间不足的情况
        if (availableRooms.Count < booking.NumberOfRooms)
        {
            ModelState.AddModelError("", "该房型可用房间数量不足");
            // 重新加载房型数据返回视图
            var roomTypes = _context.RoomTypes.Select(r => new SelectListItem { Text = r.TypeName, Value = r.Id.ToString() }).ToList();
            ViewData["RoomTypes"] = roomTypes;
            return View(booking);
        }

        // 4. 设置房间状态为不可用
        foreach (var room in availableRooms)
        {
            room.Available = false;
        }
        await _context.SaveChangesAsync();

        return RedirectToAction(nameof(Index));
    }

    // 模型验证失败时重新加载房型数据
    var roomTypes = _context.RoomTypes.Select(r => new SelectListItem { Text = r.TypeName, Value = r.Id.ToString() }).ToList();
    ViewData["RoomTypes"] = roomTypes;
    return View(booking);
}

这段代码会在预订成功后自动锁定对应数量的可用房间,同时处理房间不足的异常情况,给用户返回错误提示。

内容的提问来源于stack exchange,提问作者Prigesh Basnet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 23:50:23