2014-07-24 49 views
2

在我家/索引页由我的家控制器返回,我增加了一个HTML操作链接:HTML动作链接不带我到正确的页面

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

当点击它应该带我去创建页面。此创建页面由我的CustomerTicketInfo控制器返回,该控制器允许用户创建票证,然后提交票证。

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

我不知道为什么这会失败。我在说明行动:创建。和控制器:CustomerTicketInfo中的Action链接参数。但它仍然想要去主页控制器? 我在做什么错?

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

回答

3

您使用的过载所产生不期望的结果:

public static MvcHtmlString ActionLink 
    (this HtmlHelper htmlHelper, 
    string linkText, 
    string actionName, 
    object routeValues, 
    object htmlAttributes) 
  • 参数1:链接文本
  • 参数2:动作
  • 参数3:的控制器,但路线数据(注意字符串“CustomerTicketInfo”的长度如何== 18)
  • 参数4:HTML属性

相反,你可能希望这样的:

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

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

+0

完成谢谢。就是这样。我错过了null参数。它效果很好。谢谢一堆! –

+0

没问题!我经常犯这个错误。 –

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' 
      },