Html Actionlink没有带我到正确的页面

时间:2014-07-24 20:12:26

标签: asp.net-mvc razor actionlink

在我家控制器返回的Home / index页面上,我添加了一个HTML Action Link:

  @Html.ActionLink("Create Ticket", "Create", "CustomerTicketInfo", new { @class = "btn btn-default" })

点击后,我会转到创建页面。我的CustomerTicketInfo控制器返回此创建页面,该控制器允许用户创建票证,然后提交票证。

但是当我点击操作链接时,我发现服务器错误/资源未找到。它试图转到:http://localhost:61517/Home/Create?Length=18,其中不存在Create方法。它存在于CustomerTicketInfo控制器中。

我不确定为什么会失败。我正在陈述行动:创建。和控制器: CustomerTicketInfo 在Action链接参数中。但它仍然想要去家庭控制器? 我做错了什么?

我可以给你一个标签,但是,我想以MVC的方式做到这一点。

2 个答案:

答案 0 :(得分:3)

您正在使用导致不良结果的重载:

public static MvcHtmlString ActionLink
  (this HtmlHelper htmlHelper, 
  string linkText, 
  string actionName, 
  object routeValues, 
  object htmlAttributes)
  • param 1:链接文字
  • param 2:action
  • param 3:不是控制器,但路由数据(注意字符串的长度" CustomerTicketInfo" == 18)
  • param 4:HTML属性

相反,你可能想要这个:

@Html.ActionLink( "Create Ticket", "Create", "CustomerTicketInfo", null, new { @class = "btn btn-default" } )

请注意额外参数,这会导致使用正确的重载。

答案 1 :(得分:1)

是的,蒂姆的解决方案可以解决您的问题。由于有时很难记住正确的重载,我更喜欢在下面构建@Html.ActionLink,所以我知道我为哪个参数赋值。

@Html.ActionLink( linkText: "Create Ticket",
                  actionName: "Create",
                  controllerName: "CustomerTicketInfo",
                  routeValues: null,
                  htmlAttributes: new
                  {
                     @class = "btn btn-default"
                  })

通过这种方式,它具有什么样的可读性。如果我们需要为routeValues传递多个值,那么可以像

那样完成
routeValues: new
             {
                 type = 'whatever type',
                 id = 'id value'
             },