HTML.ActionLink 方法
HTML.ActionLink 方法
假设我有一个类
public class ItemController:Controller { public ActionResult Login(int id) { return View("Hi", id); } }
在页面上,该类没有位于Item文件夹中,其中ItemController
驻留,我想创建一个链接到Login
方法。那么我应该使用哪个Html.ActionLink
方法,传递什么参数?
具体而言,我正在寻找替代
Html.ActionLink(article.Title, new { controller = "Articles", action = "Details", id = article.ArticleID })
这个方法已经在最近的ASP.NET MVC版本中被淘汰。
admin 更改状态以发布 2023年5月22日
我想对Joseph Kingry的答案进行补充。他提供了解决方案,但起初我也无法使其工作,并得到了与Adhip Gupta类似的结果。然后我意识到,路由必须首先存在,并且参数必须与路由完全匹配。所以我的路由有一个id和一个文本参数,这也需要包括进来。
Html.ActionLink(article.Title, "Login", "Item", new { id = article.ArticleID, title = article.Title }, null)
我认为您想要的是这个:
ASP.NET MVC1
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)
ASP.NET MVC2
两个参数的位置已经被交换了
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). )
使用下面的ActionLink方法签名:
public static string ActionLink(this HtmlHelper htmlHelper, string linkText, string actionName, string controllerName, object values, object htmlAttributes)
ASP.NET MVC3+
参数的顺序与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). )
这避免了将任何路由逻辑硬编码到链接中。
Title
假设以下情况,将给您以下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 );