ActionLink没有将参数传递给Controller - asp.Net MVC 4

时间:2015-03-04 09:41:56

标签: asp.net-mvc asp.net-mvc-4

请问我的一个控制器现在有几个小时的问题。我在项目中成功使用了类似的metothos。但是,由于某种原因,此控制器的参数始终为空。下面是我的控制器。

[Authorize(Roles = "Employer")]
public class EmployerController : Controller
{
  [HttpGet]
  public ActionResult Index(long? id)
  {

  }

}

我的行动链接位于

之下
 <p>@Html.ActionLink("View jobs", "Index", "Employer", new { id = userid})</p>

我使用了断点并确认我的用户标识不是空的。

以下是我的路线。

 public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.MapRoute(
               name: null,
               url: "{controller}/Page{page}",
               defaults: new { Controller = "Home", action = "Index" }
               );
            routes.MapRoute(
                name: null,
                url: "{Controller}",
                defaults: new { Controller = "Home", action = "Index" }
                );

          routes.MapRoute(
          name: null,
          url: "{controller}/{action}/{id}/{title}",
          defaults: new
          {
              controller = "Home",
              action = "Index",
              title=UrlParameter.Optional,
              id = UrlParameter.Optional
          }
          );
            routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new
            {
                controller = "Home",
                action = "Index",
                id = UrlParameter.Optional
            }
            );
            routes.MapRoute(null, "{controller}/{action}");
        }
    }

我期待我的行动能够通过第四条路线服务。

routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new
                {
                    controller = "Home",
                    action = "Index",
                    id = UrlParameter.Optional
                }

以前我的控制器参数是employerId,然后我虽然这可能是我的错误的原因,因为我在路由中使用id。我改为id,但仍然空着。我的网址正在返回类似的内容。

Employer?Length=8

LEnghth来自哪里?请问我哪里出错了?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

问题是您使用了@Html.ActionLink的错误重载。

而不是

<p>@Html.ActionLink("View jobs", "Index", "Employer", new { id = userid })</p>

尝试

<p>@Html.ActionLink("View jobs", "Index", "Employer",new { id = userid }, null)</p>

OR

<p>@Html.ActionLink("View jobs", "Index", "Employer",new { id = userid }, new{})</p>

答案 1 :(得分:1)

您必须使用此overload

@Html.ActionLink("View jobs", "Index", "Employer", new { id = userid}, null)

您当前正在使用wrong overload,它将控制器名称视为路由值。 (它是8个字符的序列)