假设我有一堂课
public class ItemController:Controller { public ActionResult Login(int id) { return View("Hi", id); } }
在不位于项目文件夹ItemController所在的页面上,我想创建该Login方法的链接。那么Html.ActionLink我应该使用哪种方法以及应该传递什么参数呢?
ItemController
Login
Html.ActionLink
具体来说,我正在寻找方法的替代品
Html.ActionLink(article.Title, new { controller = "Articles", action = "Details", id = article.ArticleID })
在最近的ASP.NET MVC版本中已停用。
我认为您想要的是:
Html.ActionLink(article.Title, "Login", // <-- Controller Name. "Item", // <-- ActionMethod new { id = article.ArticleID }, // <-- Route arguments. null // <-- htmlArguments .. which are none. You need this value // otherwise you call the WRONG method ... // (refer to comments, below). )
这使用以下方法ActionLink签名:
public static string ActionLink(this HtmlHelper htmlHelper, string linkText, string controllerName, string actionName, object values, object htmlAttributes)
两个论点已经改变
Html.ActionLink(article.Title, "Item", // <-- ActionMethod "Login", // <-- Controller Name. new { id = article.ArticleID }, // <-- Route arguments. null // <-- htmlArguments .. which are none. You need this value // otherwise you call the WRONG method ... // (refer to comments, below). )
public static string ActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, string controllerName, object values, object htmlAttributes)
参数与MVC2的顺序相同,但是不再需要id值:
Html.ActionLink(article.Title, "Item", // <-- ActionMethod "Login", // <-- Controller Name. new { article.ArticleID }, // <-- Route arguments. null // <-- htmlArguments .. which are none. You need this value // otherwise you call the WRONG method ... // (refer to comments, below). )
这样可以避免将任何路由逻辑硬编码到链接中。
<a href="/Item/Login/5">Title</a>
假定以下内容,这将为您提供以下html输出:
article.Title = "Title"
article.ArticleID = 5
。。
routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults );