【问题标题】:error using enum for displaying data使用枚举显示数据时出错
【发布时间】:2018-05-25 04:34:04
【问题描述】:

视图显示一秒钟,然后引发以下错误-

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

我有一个表单正在进行 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);
});

表格:

 <form id="SearchForm" action="@Url.Action("Details", "Search")" method="get" data-ajax="true" data-sortOrder="@SortResultEnum.ClientName" data-sortDirection="@SortDirection.Ascending">

   @Html.TextBox("SearchString", ViewBag.CurrentSearchString as string, new { id = "SearchString", @class = "form-control", placeholder = "" })
  <span class="input-group-btn">
       <button class="btn btn-primary" type="submit" id="search-btn"><i class="glyphicon glyphicon-search"></i></button>
   </span>

        </form>

控制器动作就像

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

}

谁能帮我解决这个错误。谢谢。

【问题讨论】:

  • 错误消息告诉您您的操作没有收到 tis sortField 参数的值。调试您的代码以了解原因。大概$form.attr("data-sortOrder") 不会产生有效值。如果是这样,那么该值一定在某处丢失了。调试以找出位置。顺便说一句,你为什么要在变量前加上$
  • 您将枚举值传递给控制器​​sortField,而不是完整的枚举。您必须将 SortResultEnum sortField 替换为 string sortField。您的控制器操作方法应具有以下参数public async Task&lt;ActionResult&gt; Details(string sortField, string sortDirection, string searchString, int? page)
  • @mmushtaq,这是不正确的。该参数应该接收SortResultEnum 类型的值,因此应该将其声明为该类型。问题是没有传递这样的值。
  • $form.attr("data-sortOrder") 中收到了正确的值。我的表单出现一秒钟然后丢失并出现错误。我已经检查过在 PartialView 中传递的模型是否具有所有正确的值
  • @jmcilhinney 我想知道 OP 如何将Enum 类型参数传递给控制器​​。正如以下SO thread 所建议的,枚举值应作为intstring 传递,并将这些值转换为控制器中的枚举类型。

标签: c# ajax enums


【解决方案1】:

我认为您错过了 data-sortOrder 中的“”。 试试这个。

  data-sortOrder="@SortResultEnum.ClientName"

【讨论】:

  • 会有什么不同?我在传递给 PartialView 的模型中得到了正确的值。 partialView 出现一秒钟然后消失并出现错误消息
  • 替换结果(响应);以前从未使用或见过此功能。是默认函数还是你自己的???
  • 我刚刚成功了。
猜你喜欢
  • 1970-01-01
  • 2018-09-10
  • 1970-01-01
  • 1970-01-01
  • 2017-02-06
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多