2009-06-22 131 views
1

在传统的网站网址显示为:网址asp.net的MVC方式

http://www.mySite.com/Topics

通常意味着页面坐在下面的根命名为“主题”子文件夹,并有一个网页名为default。 htm(或类似)。

我试图让我的头脑与MVC的做事方式和理解路由的足够知道我应该考虑URL的不同。

所以,如果我有一个数据库驱动的页面,我通常脚本在位于/Topics/index.aspx的物理页面 - 这看起来在MVC应用程序?

MNY THX --steve ...

+0

需要注意的是,.NET路由不是特定于MVC的:它也可以被标准WebForms应用程序使用。 – 2009-06-22 19:11:17

回答

0

它看起来就像你想要的一样。

路由使URL变得非常虚拟。在asp.net mvc中,它将结束于指定的控制器动作方法,该方法将决定进一步做什么(即 - 它可以返回指定的视图,无论它是物理位置,它可以返回纯文本,它可以返回以JSON/XML序列化的内容) 。

这里有一些外部链接:
URL routing introduction通过ScottGu
ASP.NET MVC tutorials由斯蒂芬·瓦尔特

0

恕我直言,这是你需要什么你的路由。

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

您需要一个可以构建View(主题)的TopicsController。

+0

我不认为这是一个好主意,创建具有特定控制器/操作作为默认值的'通用'路线,除非这些不是主页/索引。 – 2009-06-22 14:28:12

1

这听起来像你正在使用的资源(主题,用户等)方面打破你的网站构建你的网站。这很好,因为现在你可以或多或少地考虑控制器而不是文件夹。

假设您在WebForms ASP.NET中有这样的结构。

-Topics 
    -index.aspx 
    -newtopic.aspx 
    -topicdetails.aspx 
-Users 
    -index.aspx 
    -newuser.aspx 
    -userdetails.aspx 

在MVC应用程序的结构将是非常从一个用户点是相同的,但不是一个URL映射到一个文件夹,你的URL映射到控制器。它不是具有文件的文件夹(资源),而是具有操作。

-TopicController 
    -index 
    -new 
    -details 
    -UserController 
    -index 
    -new 
    -details 

这些Actions中的每一个然后才会决定什么看法(是这个网站,或JSON/XML)需要返回给浏览器。

动作可以采取不同的行为,具体取决于它们重复使用的HTTP动词。例如;

public class UserController : Controller 
{ 
    public ActionResult Create() 
    { 
     return View(new User()); 
    } 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Create(User user) 
    { 
     // code to validate /save user 

     if (notValid) 
      return new View(user); 
     else 
      return new View("UserCreatedConfirmation"); 
    } 
} 

这有点的RESTful网址,我建议你看看一个煮熟的版本。他们可以帮助简化应用程序的设计。