2014-07-24 50 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' 
      },