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

ASP.NET MVC 5报错:Value cannot be null. Parameter name: source

解决WebGrid的ArgumentNullException:Model为null的问题

你碰到的这个System.ArgumentNullException完全符合你的推测——就是因为传给WebGrid的Model是null导致的。问题出在你的Index Action方法里,仔细看:你已经通过GetBooks获取到了数据data,但返回视图的时候没有把这个数据传递给视图,所以视图里的@model List<LibraryP3.BooksTable>自然就是null了。

第一步:修正Index Action方法

把你的Index方法最后一行的return View();改成return View(data);,这样数据就会作为Model传递到视图里,WebGrid就能拿到有效的source了。修正后的代码如下:

public ActionResult Index(int page = 1, string sort = "Author", string sortdir = "asc", string search = ""){
    int pageSize = 10;
    int totalRecord = 0;
    if (page < 1) page = 1;
    int skip = (page * pageSize) - pageSize;
    var data = GetBooks(search, sort, sortdir, skip, pageSize, out totalRecord);
    ViewBag.TotalRows = totalRecord;
    ViewBag.search = search;
    // 这里把data作为Model传给视图
    return View(data);
}

第二步:额外的安全防护(可选)

为了避免后续可能出现的类似问题,你可以在视图里先判断Model是否为空,再初始化WebGrid,比如:

@model List<LibraryP3.BooksTable>
@{ Layout = null;
var grid = new WebGrid(canPage: true, rowsPerPage: 10);
// 先判断Model是否为空,为空则传空列表
grid.Bind(source: Model ?? new List<LibraryP3.BooksTable>(), rowCount: ViewBag.TotalRows, autoSortAndPage:false);
}

这样即使Model偶尔还是null的情况,也不会抛出异常,而是显示一个空的网格。

另外,你的GetBooks方法里,当查询不到数据时,v.ToList()会返回一个空列表而不是null,所以只要Action正确传递Model,视图里的Model就不会是null了——这一步主要是做双重保险。

内容的提问来源于stack exchange,提问作者André Mateus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:07:19