ActionLink参数始终为null-即使使用自定义路由

时间:2019-04-02 15:26:45

标签: c# asp.net-mvc-5

应用程序管理请求。有一个ActionLink应该传递请求的ID,以便可以将其重置。调用了正确的控制器/操作,但请求ID始终为空。

如果我将自定义路由的最后一个参数(如下所示)更改为id =“ TEST”,则“ TEST”将传递到函数中-因此我知道选择了正确的路由。

在控制器BrowseController.cs

 [HttpGet]
 public ActionResult ResetRequest(string id )
 {
   return View();
 }

在View BrowseRequests.cshtml中,有一个链接可以重置请求

    @Html.ActionLink(
    "Reset", 
    "ResetRequest", 
    "Browse", 
    new {id = item.RS_RequestID.ToString() });

我尝试了RouteConfig.cs中的默认路由,然后尝试在默认路由之前插入以下内容。

    routes.MapRoute(
       name:"ResetRequest",
       url:"Browse/ResetRequest/{id}",
       defaults: new { controller = "Browse", 
                       action = "ResetRequest", 
                       id=UrlParameter.Optional});

3 个答案:

答案 0 :(得分:0)

您传递给ActionLink的值的顺序不正确

使用动作,控制器,路由值,htmlArguments

您的第一个参数应为ResetRequest

答案 1 :(得分:0)

您的建议导致出现“找不到资源”错误。这的确使我想到,也许我为ActionLink使用的签名不正确。

我发现没有指定控制器的替代项-只是操作。 这就是我的目的

    @Html.ActionLink(
      "Reset", 
      "ResetRequest", 
      new { id = item.RS_RequestID.ToString() });

答案 2 :(得分:0)

您的ActionLink正确的重载应该是

HtmlHelper.ActionLink(string linkText,string actionName,string ControllerName, object routeValues, object htmlAttributes);

因此您缺少可作为null传递的对象htmlAttributes

@Html.ActionLink("Reset","ResetRequest","Browse", new {id = item.RS_RequestID.ToString() }, null);