2015-04-23 99 views
2

我定義我首頁查看屬性路由和RouteLink

<body> 
    <div> 
     <h1>Home</h1> 
     @Html.RouteLink("R1", "first", new { user="R1"}) 
     @Html.RouteLink("R2", "second", new { company = "R2" }) 
    </div> 
</body> 

登錄控制器

public class LoginController : Controller 
    { 
     // GET: Login 

     [Route("{user}", Name = "first")] 
     public ActionResult Index(string user) 
     { 
      return View(); 
     } 
     [Route("{company}", Name = "second")] 
     public ActionResult Index2(string company) 
     { 
      return View(); 
     } 
    } 

RouteConfig

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

      routes.MapMvcAttributeRoutes(); 
      routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 


     } 
    } 

我想象在主頁R1R2分別點擊其路由正確的行爲結果索引和索引2。

但其產生波紋錯誤

當前請求是採用以下的操作方法之間曖昧: System.Web.Mvc.ActionResult指數(System.String)上 類型MVCTest.Controllers.LoginController系統。 Web.Mvc.ActionResult 索引2(System.String)的類型MVCTest.Controllers.LoginController

我不知道爲什麼發生這種情況。

+0

我知道你忙的人,有一些問題'routes'考慮在尋找我的答案來解決你所面臨的問題。 – adricadar

回答

1

問題:因爲你只指定路線{params}請求將是www.example.con/params和程序是困惑,因爲你有2與此URL操作,並這就是爲什麼錯誤。

www.example.con/matrixwebtech // Login/Index/matrixwebtech or Login/Index2/matrixwebtech? 
www.example.con/stackoverflow // Login/Index/stackoverflowor Login/Index2/stackoverflow? 

解決方案:正如你看到有這兩條路線之間沒有區別,我們必須做出一個。

解決這個你必須使路線不同name/{params}不僅{params}

public class LoginController : Controller 
{ 
    [Route("{user}", Name = "first")] 
    public ActionResult Index(string user) 
    { 
     return View(); 
    } 
    [Route("company/{company}", Name = "second")] 
    public ActionResult Index2(string company) 
    { 
     return View(); 
    } 
} 

現在要訪問此,我們都會有這樣的路線與沒有confussion

www.example.con/matrixwebtech // /Login/Index/matrixwebtech 
www.example.con/company/stackoverflow // /Login/Index2/stackoverflow 

注:你可以找到更多信息關於Route here.

+0

嗨,昨天看了文章。並面臨問題。請閱讀上面的評論,我討論nopcommerc。 – matrixwebtech

+0

@matrixwebtech我看着那個,但有**只有1個動作**只做1件事** **替代產品**。您嘗試使用相同的地址訪問** 2操作**,這可以與嘗試訪問www.stackoverlfow.com並期望看到Google相反...... – adricadar

+0

@matrixwebtech要做您所顯示的內容,您只需** 1行動**在路線上'/'。你必須選擇,看我的更新答案,我選擇'用戶'在'/'上。 – adricadar

1

而不是使用{用戶}{公司},使用用戶公司

例子:

[Route("user", Name = "first")] 
    public ActionResult Index(string user) 
    { 
     return View(); 
    } 
    [Route("company", Name = "second")] 
    public ActionResult Index2(string company) 
    { 
     return View(); 
    } 
+0

嗨,感謝您的回覆 – matrixwebtech

+0

嗨,感謝您的回覆,如果我使用'[Route(「user」,Name = 「first」)]'url是**/user?user = R1 **,如果使用'[Route(「login/index/{user}」,Name =「first」)]'那麼url是**/login/index/R1 **,但我不想要這樣的網址。如果您在主頁上的[link] http://demo.nopcommerce.com [/ link]左鍵點擊** category菜單,請點擊在**電子**上,並點擊** 25美元虛擬禮品卡**產品的第一個URL是[鏈接] http://demo.nopcommerce.com/electronics [/鏈接]和第二[鏈接]演示。 nopcommerce.com/build-your-own-computer[\link],我認爲他們也走向了不同的路線。如何做到這一點? – matrixwebtech

+0

那麼你只想顯示用戶和公司?喜歡這個? localhost:1234/user/R1 –