C# 使用枚举显示数据时出错

C# 使用枚举显示数据时出错,c#,ajax,enums,C#,Ajax,Enums,视图出现一秒钟,然后抛出以下错误- 参数字典包含不可为空的类型为“Project.Enumerators.SortResultEnum”的参数“sortField”的空条目,用于方法“System.Threading.Tasks.Task”1[System.Web.Mvc.ActionResult]详细信息(Project.Enumerators.SortResultEnum,System.Web.Helpers.SortDirection,System.String,System.nullab

视图出现一秒钟,然后抛出以下错误-

参数字典包含不可为空的类型为“Project.Enumerators.SortResultEnum”的参数“sortField”的空条目,用于方法“System.Threading.Tasks.Task”
1[System.Web.Mvc.ActionResult]详细信息(Project.Enumerators.SortResultEnum,System.Web.Helpers.SortDirection,System.String,System.nullable
1[System.Int32])'在'Project.Controllers.SearchController'中'。可选参数必须是引用类型、可为null的类型或声明为可选参数。 参数名称:参数

我有一个表单正在进行ajax调用,稍后ajax调用将其转发给控制器

Ajax调用:

$(document).on('submit', '#SearchForm', function () {
var $form = $(this);
var $searchString = $("#SearchString").val();
var $sortField = $form.attr("data-sortOrder");
var $sortDirection = $form.attr("data-sortDirection");

SortResults($sortField, $sortDirection, $searchString);
});
表格:


@TextBox(“SearchString”,ViewBag.CurrentSearchString作为字符串,新建{id=“SearchString”,@class=“form control”,placeholder=”“})
控制器的动作就像

public async Task<ActionResult> Details(SortResultEnum sortField,SortDirection sortDirection, string searchString,  int? page)
 {
     //code to call service and get result is here
    // partial view is being used to display data

}
公共异步任务详细信息(SortResultEnum sortField、SortDirection SortDirection、string searchString、int?页)
{
//调用服务并获取结果的代码在这里
//局部视图用于显示数据
}
有人能帮我解决这个错误吗。谢谢。

我想你错过了数据排序中的“”。 试试这个

  data-sortOrder="@SortResultEnum.ClientName"

错误消息告诉您您的操作没有收到tis
sortField
参数的值。调试代码以了解原因。大概
$form.attr(“数据排序器”)
不会生成有效值。如果是这样的话,那么这个值肯定在某个地方丢失了。调试以找出位置。顺便问一下,为什么要在变量前面加上
$
?您将枚举值传递给控制器
sortField
,而不是完整的枚举。必须将
SortResultEnum sortField
替换为
string sortField
。控制器操作方法应具有以下参数
公共异步任务详细信息(字符串sortField、字符串sortDirection、字符串searchString、int?page)
@mmushtaq,这是不正确的。该参数应接收类型为
SortResultEnum
的值,因此应将其声明为该类型。问题是没有传递这样的值。正确的值是以$form.attr(“数据排序器”)的形式接收的。我的表单出现了一秒钟,然后丢失,出现了错误。我已经检查了在PartialView中传递的模型是否具有所有正确的values@jmcilhinney我想知道OP如何将
Enum
类型参数传递给控制器。正如下面所建议的,枚举值应作为
int
string
传递,并在控制器中将这些值转换为枚举类型。这会有什么区别?我在传递给PartialView的模型中得到了正确的值。partialView出现一秒钟,然后消失,出现错误消息ReplaceResults(response);以前从未使用或见过此功能。它是默认函数还是你自己的???我刚做的。
  data-sortOrder="@SortResultEnum.ClientName"