2012-10-25 45 views
0

我有一個問題,我不知道如何解釋,但我會嘗試。 我跟着這個:http://www.deliveron.com/blog/post/SEO-Friendly-Routes-with-ASPnet-MVC.aspx 而且我能夠實現他們所描述的。 但是,如果我有一個頁面,我想從其他控制器調用操作,它不起作用。 它不會以這種方式顯示鏈接:URL中的「this-is-my-link」。MVC3鏈接SEO - 如何打電話從一個控制器到其他控制器

我不知道我做錯了什麼?

在Global.asax中

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

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

     routes.MapRoute(
      "Default2", 
      "{controller}/{action}/{id}/{pageTitle}", 
      new 
       { 
        controller = "Home", 
        action = "Index", 
        id = UrlParameter.Optional, 
        pageTitle = UrlParameter.Optional 
       } 
      ); 

    } 

查看/幫助/

@Html.ActionLink(FaqStrings.ContactUs, "ContactUs", "Home", new { id = 1, pageTitle = "link text".ToSeoUrl() }) 

它說,它無法解析聯繫我們。它不是來自HomeController的動作,而是看到了HelpController的動作。

在HomeController的

[AllowAnonymous] 
    public ActionResult ContactUs() 
    { 
     var model = new ViewModelContactUs 
         { 
          Resultmessage = string.Empty, 
          Youremail = string.Empty, 
          Yourmessage = string.Empty, 
          Yourname = string.Empty 
         }; 
     return View(model); 
    } 

    [AllowAnonymous] 
    [HttpPost] 
    public ActionResult ContactUs(ViewModelContactUs model) 
    { 
     Log.DebugFormat("HomeController-ContactUs()"); 

........

 var model2 = new ViewModelContactUs 
         { 
          ...... 
         }; 

     ModelState.Clear(); 
     return View(model2); 
    } 
+1

我不瞭解你的問題。哪些代碼不會產生期望的結果? – user1477388

+0

我添加了代碼。我希望它更清楚。 –

回答

1

試試你的控制器移動到RouteValues您@Html.ActionLink

@Html.ActionLink(FaqStrings.ContactUs, "ContactUs", new {controller="Home", id = 1, pageTitle = "link text".ToSeoUrl() }) 

編輯的字典部分

要解決邏輯問題,它必須處理Html.ActionLink方法的可用簽名。 Here is the MSDN的信息,但...

您使用的方法簽名是Html.ActionLink("Link Text", "Action", "Contoller", RouteValues, HtmlAttributes)。由於您沒有傳遞HtmlAttributes,因此發現錯誤並生成錯誤的鏈接。通過將控制器移入RouteValuesDictionary或在通話結束時通過, null應解決此問題。但是,除非需要,否則我個人不喜歡投擲零位,所以我通常只是在RouteValuesDictionary中定義控制器。

如果您未通過任何RouteValues,則撥打Html.ActionLink("Link Text", Action, Controller)時不會有問題。

希望清除它一點! :)

+0

這是正確的,非常感謝!什麼是邏輯?我想我明白了,但我不完全確定。 –

+0

我更新了答案,嘗試解釋發生了什麼(盡我所能)。 – Tommy

1

的根本問題是:

@Html.ActionLink(FaqStrings.ContactUs, 
       "ContactUs", 
       "Home", 
       new { id = 1, pageTitle = "link text".ToSeoUrl() }) 

將產生點擊將產生HTTP GETAnchor,但是你方法需要HTTP POST

[AllowAnonymous] 
[HttpPost] // <-----POST 
public ActionResult ContactUs(ViewModelContactUs model) 
+0

謝謝,這是非常有用的解釋。 –

相關問題