2010-09-20 16 views
3

嘿,這裏還有一個新手,只是玩弄.NET MVC。我的主要任務是對像URL幾個半靜態網頁:.NET MVC顯式視圖

  • /約/
  • /約/聯繫人/
  • /約/職位/

我使用一個名爲Static的控制器,並附上以下路由:

routes.MapRoute(
    "About", 
    "about/{id}", 
    new { controller = "Static", action = "Index", id = UrlParameter.Optional } 
); 

它似乎工作正常,因爲我有靜態控制器與索引方法w它使用switch語句來確定哪個頁面必須被查看。我使用RedirectToAction()函數來調用靜態控制器的其他動作,以顯示其他視圖的頁面。我的看法是:

  • /Static/About.aspx
  • /Static/Contacts.aspx
  • /Static/Jobs.aspx

這種方法似乎很好地工作,但我不喜歡它是重定向,所以瀏覽到/關於/聯繫人我得到一個重定向到/靜態/聯繫人,這不是我想要在URL中看到的。

所以我的問題是 - 這樣做的正確方法是什麼?有沒有一種方法來顯式調用我的索引操作中的某個視圖?

感謝, 〜K.

+0

對於靜態路由來說是個好問題。 – 2010-09-20 13:55:14

回答

3

不要做重定向。不是在Index操作中使用switch語句,而是針對每個頁面(即About,Contacts,Job)分別採用各自的視圖。

Static控制器可以是這個樣子:

public ActionResult Index() 
{ 
    return View(); 
} 

public ActionResult About() 
{ 
    return View(); 
} 

public ActionResult Contacts() 
{ 
    return View(); 
} 

public ActionResult Jobs() 
{ 
    return View(); 
} 

如果你需要做任何特殊處理ContactsJobs,也可以各自行動中完成。

顯式調用一定的看法:

return View("ViewName"); 

有七個重載的方法View()。其中的許多允許您通過型號:

return View("ViewName", Model); 
+0

謝謝,你的回答是正確的,也許我的問題不是。我用你的建議來創建我的靜態控制器,並有關於,聯繫人和工作行動,路由他們,這一切似乎工作正常。唯一值得關注的是URL中的大寫字母;) – kovshenin 2010-09-22 07:19:36

+0

也許關於顯式調用一個視圖的另一個問題是,如何顯式調用一個視圖並將其傳遞給一些視圖模型? – kovshenin 2010-09-22 07:20:48

+0

@kovshenin:對不起。它應該是'返回View(「ViewName」)'。我會編輯上面的答案。就大寫網址而言,您爲什麼擔心?我假設這是在IIS上運行,它具有不區分大小寫的URL。 'http:// yourdomain.com/About'將被視爲與'http:// yourdomain.com/about'相同。 – Rohrbs 2010-09-22 15:15:46

2

我建議你從Static移開,並有About控制器。在該控制器內,每頁一個方法。

public ActionResult About() 
{ 
    return View ("About"); 
} 

//Jobs() and Contacts() follow the same pattern 

3條路線,以匹配:

routes.MapRoute(
    "Jobs", 
    "about/jobs", 
    new { controller = "About", action = "Jobs" } 
); 

routes.MapRoute(
    "Contact", 
    "about/contact", 
    new { controller = "About", action = "Contact" } 
); 

routes.MapRoute(
    "About", 
    "about/", 
    new { controller = "About", action = "About" } 
); 
+0

你不需要這3條路線,默認路線將完美工作。 – Stefanvds 2010-09-20 13:55:27

+0

我同意該信息和上述評論。 – Jason 2010-09-20 14:04:32

1

你不能從一個不同的控制器返回的美景,並在URL中的第一個控制器。

唯一的辦法就是使用你的控制器。

所以把你的邏輯放在你的控制器裏。

我在我的管理控制器中擁有相同的功能。它只是一個包含一些靜態鏈接和一些額外頁面的頁面。

中的Index.aspx

我有

<ul> 
    <li> 
     <%= Html.ActionLink("Evaluaties", "Evaluaties", "Admin")%></li> 
    <li> 
     <%= Html.ActionLink("ONAS aanbieders", "Index", "ONASAanbieder")%></li> 
    <li> 
     <%= Html.ActionLink("ONAS aanbod", "Index", "ONASAanbod")%></li> 
    <li> 
     <%= Html.ActionLink("Helpbox", "Index", "HelpBox")%></li> 
</ul> 
控制器

public ActionResult Index() { 
     return View(); 
    } 

    public ActionResult Evaluaties() { 
     return View(); 
    } 

這就像你所說,沒有必要改變路線。 顯然我有Evaluaties.aspxViews文件夾中我的Admin文件夾中。

給我這個網址:http://localhost:50152/Admin/Evaluaties