请问我的一个控制器现在有几个小时的问题。我在项目中成功使用了类似的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来自哪里?请问我哪里出错了?任何帮助将不胜感激。
答案 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个字符的序列)