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

ASP.NET Core MVC中基于城市搜索酒店的功能失效问题排查

酒店按城市搜索功能故障排查与修复

以下是针对你的酒店搜索功能问题的排查和修复方案:

问题场景

基于SQL Server的酒店项目中,按城市搜索酒店的功能无法正常工作,你提供了控制器和视图代码。

原代码问题分析

  1. 空参数处理缺失:当city参数为空时,a.City.Contains(city)等价于Contains(null),会导致查询返回空结果,而非显示所有酒店。
  2. 大小写敏感问题:SQL Server默认字符串比较区分大小写,若数据库中城市名是"Beijing",搜索"beijing"会匹配失败。
  3. HTML结构不完整:视图中只有<tr>标签,缺少<table>、<thead>、<tbody>等必要结构,可能导致搜索结果无法正常渲染。
  4. 数据传递冗余:同时使用Model和ViewBag传递数据,容易造成逻辑混淆。

修复后的代码

控制器代码

public IActionResult Index(string city)
{
    // 处理空参数,返回所有酒店;否则执行不区分大小写的模糊搜索
    var hotels = string.IsNullOrEmpty(city) 
        ? _context.hotel.ToList() 
        : _context.hotel.Where(a => a.City.IndexOf(city, StringComparison.OrdinalIgnoreCase) >= 0).ToList();
    
    // 直接将数据传给View,避免冗余的ViewBag
    return View(hotels);
}

视图代码

<form asp-controller="Home" asp-action="index" method="get">
    <div class="row p-2">
        <div class="col-3">
            <!-- 回显搜索关键词,提升用户体验 -->
            <input name="city" type="text" class="form-control" value="@Context.Request.Query["city"]" />
        </div>
        <div class="col-3">
            <button type="submit" class="btn btn-success">search</button>
        </div>
    </div>
</form>
<div class="row">
    <div class="col">
        <!-- 完善表格结构,确保结果正常渲染 -->
        <table class="table table-bordered">
            <thead>
                <tr>
                    <th>ID</th>
                    <th>酒店名称</th>
                    <th>地址</th>
                    <th>城市</th>
                    <th>电话</th>
                    <th>邮箱</th>
                    <th>删除</th>
                    <th>编辑</th>
                </tr>
            </thead>
            <tbody>
                <!-- 直接使用Model传递的数据,无需转换ViewBag -->
                @foreach (var item in Model as List<Hotel>)
                {
                    <tr class="text-center">
                        <td>@item.Id</td>
                        <td>@item.Name</td>
                        <td>@item.Address</td>
                        <td>@item.City</td>
                        <td>@item.Phone</td>
                        <td>@item.Email</td>
                        <td><a asp-action="Delete" asp-route-id="@item.Id"><i class="fa fa-trash text-danger"></i></a></td>
                        <td><a asp-action="Edit" asp-route-id="@item.Id"><i class="fa fa-edit text-success"></i></a></td>
                    </tr>
                }
            </tbody>
        </table>
    </div>
</div>

额外建议

  • 可以给输入的城市关键词添加Trim()处理,避免空格导致的匹配失败:city = city?.Trim()
  • 若需要更高效的模糊搜索,可在SQL Server的City字段上创建全文索引,使用EF.Functions.FreeText等方法优化查询性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 14:33:11