MVC 3中的“System.ArgumentNullException:Value不能为null”

时间:2014-03-12 13:05:59

标签: jquery asp.net-mvc linq asp.net-mvc-3 razor

当我使用jQuery对话框和实体框架开发CRUD操作的基本Employee应用程序时,我在调试时遇到两种类型的错误,当我构建解决方案时,我知道它们彼此链接但是我我无法弄清楚

构建时出现错误1:

方法的类型参数' System.Linq.Enumerable.OrderBy(System.Collections.Generic.IEnumerable,System.Func)'无法从使用中推断出来。尝试明确指定类型参数

此代码(在Model类中):

public IEnumerable<tblEmployee> GetEmployeePage(int pageNumber, int pageSize, string searchCriteria)
{
    if (pageNumber < 1)
        pageNumber = 1;

    return testEmp.tblEmployees
      .OrderBy(searchCriteria) //I am getting error here//
      .Skip((pageNumber - 1) * pageSize)
      .Take(pageSize)
      .ToList();
}

调试时出现错误2:

System.ArgumentNullException:值不能为空。

以下代码(在视图中):

@model Emp_Mvc_Application.Models.PagedEmployeeModel 
@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
    WebGrid grid = new WebGrid(rowsPerPage: Model.PageSize);
    grid.Bind(Model.TblEmp, autoSortAndPage: false, rowCount: Model.TotalRows);
}

2 个答案:

答案 0 :(得分:2)

您的搜索条件必须是lambda表达式,例如

OrderBy(e => e.EmployeeID)

而不是string尝试这个

public IEnumerable<tblEmployee> GetEmployeePage(int pageNumber, int pageSize, Func<tblEmployee, object> searchCriteria)
{
if (pageNumber < 1)
        pageNumber = 1;

    return testEmp.tblEmployees
      .OrderBy(searchCriteria) 
      .Skip((pageNumber - 1) * pageSize)
      .Take(pageSize)
      .ToList();
}

这样称呼:

var result = GetEmployeePage(1, 10, e => e.EmployeeId)

答案 1 :(得分:0)

看起来你正在传递一个字符串作为你的orderby标准 - 该方法期待一个委托。这似乎是一个误导性的错误,但我相信这是你的问题。

例如:

.OrderBy(e => e.LastName)

如果您需要能够按字符串标准排序,您可能希望在此处查看 - How do I apply OrderBy on an IQueryable using a string column name within a generic extension method?