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

ASP.NET Core MVC多列搜索栏实现及数据绑定技术咨询

ASP.NET Core MVC 房产系统多列搜索实现及数据绑定方案

一、视图层:改造搜索栏支持多条件筛选

将原搜索表单调整为支持价格区间、面积区间+单位选择的结构,给每个表单控件添加name属性,方便后端接收参数:

@model IEnumerable<eHouse.Models.RentModel>

<form asp-action="Rent" method="get" id="searchForm">
    <div class="wrap">
        <!-- 全局搜索框 -->
        <div class="search">
            <input type="text" class="searchTerm" name="keyword" 
                   style="width: 700px; color:#000000; text-align: left;" 
                   placeholder="搜索房源名称/描述..." value="@Request.Query["keyword"]">
            <button type="submit" class="searchButton">
                <i class="fa fa-search"></i>
            </button>
        </div>
        <!-- 多条件筛选区 -->
        <div id="filter">
            <!-- 面积单位选择 -->
            <select name="areaUnit" class="area-unit">
                <option value="Kanal" @(Request.Query["areaUnit"] == "Kanal" ? "selected" : "")>Kanal</option>
                <option value="Marla" @(Request.Query["areaUnit"] == "Marla" ? "selected" : "")>Marla</option>
                <option value="Square Feet" @(Request.Query["areaUnit"] == "Square Feet" ? "selected" : "")>Square Feet</option>
                <option value="Square Meter" @(Request.Query["areaUnit"] == "Square Meter" ? "selected" : "")>Square Meter</option>
                <option value="Square Yards" @(Request.Query["areaUnit"] == "Square Yards" ? "selected" : "")>Square Yards</option>
            </select>
            <!-- 面积区间 -->
            <input type="number" name="minArea" placeholder="最小面积" value="@Request.Query["minArea"]" min="0">
            <input type="number" name="maxArea" placeholder="最大面积" value="@Request.Query["maxArea"]" min="0">
            <!-- 价格区间 -->
            <input type="number" name="minPrice" placeholder="最低价格" value="@Request.Query["minPrice"]" min="0">
            <input type="number" name="maxPrice" placeholder="最高价格" value="@Request.Query["maxPrice"]" min="0">
        </div>
    </div>
</form>

二、控制器层:接收筛选参数并过滤数据

修改Rent方法,接收筛选参数并添加过滤逻辑,同时保留分页功能:

public IActionResult Rent(int PageNumber = 1, 
                          string keyword = null, 
                          string areaUnit = null, 
                          decimal? minArea = null, 
                          decimal? maxArea = null, 
                          decimal? minPrice = null, 
                          decimal? maxPrice = null)
{
    var data = rdb.GetDataHouse().AsQueryable();

    // 关键词筛选(匹配标题或描述)
    if (!string.IsNullOrEmpty(keyword))
    {
        data = data.Where(x => x.tittle.Contains(keyword) || x.descrip.Contains(keyword));
    }

    // 面积筛选(需确保数据库中面积字段与选择单位匹配,或统一转换单位后比较)
    if (!string.IsNullOrEmpty(areaUnit) && minArea.HasValue)
    {
        data = data.Where(x => x.area >= minArea.Value && x.areaUnit == areaUnit);
    }
    if (!string.IsNullOrEmpty(areaUnit) && maxArea.HasValue)
    {
        data = data.Where(x => x.area <= maxArea.Value && x.areaUnit == areaUnit);
    }

    // 价格区间筛选
    if (minPrice.HasValue)
    {
        data = data.Where(x => x.price >= minPrice.Value);
    }
    if (maxPrice.HasValue)
    {
        data = data.Where(x => x.price <= maxPrice.Value);
    }

    // 分页逻辑
    var totalCount = data.Count();
    ViewBag.Totalpages = Math.Ceiling(totalCount / 6.0);
    var paginatedData = data.Skip((PageNumber - 1) * 6).Take(6).ToList();

    return View(paginatedData);
}

三、数据绑定到property_information div

你当前的视图已通过@foreach实现数据绑定,这里补充空数据提示并优化细节:

<div class="property_information">
    @if (Model.Any())
    {
        foreach (var item in Model)
        {
            <div class="home-info">
                <span id="houseid">@item.id</span>
                <a href="#" class="home-images">
                    <img src="@item.pic1" alt="@item.tittle" />
                </a>
                <div class="home-data">
                    <div class="home-name">
                        <p>@item.tittle</p>
                    </div>
                    <div class="price">
                        <p>@item.price</p>
                    </div>
                    <div class="features">
                        <span>@item.bedroom 卧室</span>
                        <span>@item.bathroom 浴室</span>
                        <span>@item.area @item.areaUnit</span>
                    </div>
                    <div class="desc">
                        @item.descrip
                    </div>
                    <div class="contact-save">
                        <a href="#" class="phone_number" id="favorite" onclick="Fav(this)" data-id="@item.id">
                            <i class="fas fa-heart" style=" color: white;"></i>
                        </a>
                        <div class="popup" onclick="myFunction()">
                            <a href="tel:+928754756478" class="phone_number" onclick="call()"></a>
                        </div>
                        <div class="popupmsg" onclick="myFunctionmsg()">
                            <a href="#" class="phone_number open_message" onclick="msg()"></a>
                        </div>
                        <a href="#" class="phone_number" onclick="del(this)" data-id="@item.id">
                            <i class="fas fa-trash-alt" style=" color: white;"></i>
                        </a>
                    </div>
                </div>
            </div>
        }
    }
    else
    {
        <p class="no-data">未找到符合条件的房源</p>
    }
</div>

可选:无刷新搜索优化

若要实现无刷新更新房源列表,添加AJAX逻辑局部刷新目标区域:

$(document).ready(function() {
    $("#searchForm").submit(function(e) {
        e.preventDefault();
        var formData = $(this).serialize();
        $.get("/Rent", formData, function(response) {
            $(".property_information").html($(response).find(".property_information").html());
        });
    });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 04:05:19