HTML.ActionLink 方法

15 浏览
0 Comments

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日
0
0 Comments

我想对Joseph Kingry的答案进行补充。他提供了解决方案,但起初我也无法使其工作,并得到了与Adhip Gupta类似的结果。然后我意识到,路由必须首先存在,并且参数必须与路由完全匹配。所以我的路由有一个id和一个文本参数,这也需要包括进来。

Html.ActionLink(article.Title, "Login", "Item", new { id = article.ArticleID, title = article.Title }, null)

0
0 Comments

我认为您想要的是这个:

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输出:

  1. article.Title = "Title"
  2. article.ArticleID = 5
  3. 您仍然定义了以下路由

.
.

routes.MapRoute(
    "Default",     // Route name
    "{controller}/{action}/{id}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);

0