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

使用Linq构建PagedList遇模型适配问题,求问题排查方案

问题分析与修正方案

你的代码存在多处不匹配和逻辑错误,导致分页功能无法正常工作,具体问题及修正如下:

核心问题点

  • 模型类型不兼容:View声明的模型是IPagedList<Model_Table>,但Controller返回的是单个Model_Table实例,两者完全不匹配。
  • 分页参数混淆:Controller接收的是pagesize(每页数量),但分页控件传递的是SayfaNo(页码),参数名不对应;且ToPagedList参数顺序错误(正确顺序是(页码, 每页数量))。
  • 分页对象未生效:model.D1Lists.OrderBy(...).ToPagedList(...)的结果未保存,分页逻辑白执行。
  • 控制器跳转错误:分页控件指定了Home控制器,但实际逻辑在DenemeController,会导致跳转失效。
  • Join类型不匹配:a.Table2_ID(数值类型)与c.table3_ID.ToString()(字符串)进行关联,类型不兼容会引发异常。

修正后的Controller代码

using System;
using System.Linq;
using System.Web.Mvc;
using DDD.Models;
using PagedList;

namespace DDDD.Controllers
{
    public class DenemeController : Controller
    {
        DDDEntities _db = new DDDEntities();
        
        // 接收页码参数,默认显示第1页,每页固定10条(可改为参数传入)
        public ActionResult Index(int? sayfaNo)
        {
            int mevcutSayfa = sayfaNo ?? 1;
            int sayfaBoyutu = 10;

            // 修正Join类型匹配:根据实际数据库字段类型调整,示例假设两边均为数值类型
            var veriListesi = from o in _db.table1
                              join a in _db.table2 on o.table1_ID equals a.Table2_ID
                              join c in _db.table3 on a.Table2_ID equals c.table3_ID
                              select new D1List
                              {
                                  A1 = o.B1,
                                  A2 = o.B2,
                                  A3 = a.B3,
                                  table_name = o.table_name // 确保该字段存在,用于排序
                              };

            // 先排序再生成分页对象,注意参数顺序:页码在前,每页数量在后
            var sayfalistirilmisVeri = veriListesi.OrderByDescending(m => m.table_name)
                                                  .ToPagedList(mevcutSayfa, sayfaBoyutu);

            Model_Table model = new Model_Table();
            model.D1Lists = sayfalistirilmisVeri; // 确保Model_Table的D1Lists属性类型为IPagedList<D1List>

            return View(model);
        }
    }
}

修正后的View代码

@using PagedList
@using PagedList.Mvc
@using DDD.Models
@model Model_Table // 与Controller返回的模型类型保持一致

@{
    ViewBag.Title = "Title";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>mmm</h2>

<div id="table">
    <table>
        <thead>
            <tr>
                <th>Şirket Adı</th>
                <th>Müşteri Adı</th>
                <th>Şehir</th>
            </tr>
        </thead>
        <tbody>
            <!-- 遍历Model中的分页列表 -->
            @foreach (var item in Model.D1Lists)
            {
                <tr>
                    <td>@item.A1</td>
                    <td>@item.A2</td>
                    <td>@item.A3</td>
                </tr>
            }
        </tbody>
    </table>

    <!-- 修正控制器名称为Deneme,传递正确的页码参数 -->
    @Html.PagedListPager(Model.D1Lists, sayfaNo => Url.Action("Index", "Deneme", new { sayfaNo = sayfaNo }))
</div>

额外注意事项

  1. 确保Model_Table类中D1Lists属性的类型为IPagedList<D1List>,而非普通List<D1List>:
    public class Model_Table
    {
        public IPagedList<D1List> D1Lists { get; set; }
        // 其他属性...
    }
    
  2. 如果c.table3_ID是字符串类型,需将a.Table2_ID转为字符串再进行Join:
    join c in _db.table3 on a.Table2_ID.ToString() equals c.table3_ID
    
  3. 确认D1List类中存在用于排序的table_name字段,若不存在需替换为实际可用的排序字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:45:03