我想实现以下网址:
www.domain.com/Business/Manufacturing/Category/Product1
这将提供特定产品的详细信息(例如规格)。 自分类列表&每个类别的产品都是有限的,我认为不值得使用数据库的产品。
所以我想使用HTML或ASPX文件来实现它。此外,我希望URL没有文件扩展名(即URL不应该有.html或.aspx扩展名)
如何使用ASP.NET MVC实现它?我应该在其中使用带有HTML / ASPX文件的嵌套文件夹结构,以便它对应于URL吗?那么如何避免URL中的扩展? 我对这些想法感到困惑
答案 0 :(得分:2)
Asp.net Mvc使用Microsoft的路由库。因此,在不考虑文件夹结构或文件扩展名的情况下很容易获得这种结构。使用asp.new mvc,您不会将请求指向特定文件。相反,您指向处理请求的操作,并使用参数来确定要呈现的内容并将其发送到客户端。要实现您的示例,您可以执行以下操作:
_routes.MapRoute(
"Product",
"Business/Manufacturing/Category/Product{id}",
new {controller = "Product", action = "Details", id = ""}
);
此路由将与您描述的URL匹配,并在名为“ProductController”的控制器上执行名为“Details”的操作(如果您使用的是默认设置)。这个动作看起来像这样:
public ActionResult Details(int id) {
return View(string.Format("Product{0}", id);
}
此操作将根据产品的ID(示例网址末尾的“产品”之后的数字)呈现视图。如果使用默认设置,则此视图应位于“视图/产品”文件夹中。然后,如果在该文件夹中添加名为“Product1.aspx”的视图,则在您访问示例中的URL时将呈现该视图。
所有这些都很难做到这一点,我强烈建议不要这样做。即使您只有少量产品并且以良好的方式使用部分视图来最小化ui重复,您也必须进行大量重复工作。我建议您为产品使用数据库或其他类型的存储,并使用单个视图作为模板来呈现产品。您可以使用相同的路线。你只需稍微编辑你的动作。它看起来像这样:
public ActionResult Details(int id) {
var product = //get product by id from database or something else
return View(product);
}
通过这种方式,您可以强烈地将视图输入到产品对象中,并且不会有太多重复。
路由引擎非常灵活,当您使用它并了解它是如何工作的时,您将能够以任何方式更改您的网址,而无需更改任何其他代码或移动任何文件。
答案 1 :(得分:1)
如果您还没有准备好深入研究ASP.Net MVC,您仍然可以通过使用ASP重写ASP.Net获得不错的URL。如果您已经熟悉ASP.Net WebForms,那就更简单了。关于URL重写的MSDN文章应该是一个好的开始:
http://msdn.microsoft.com/en-us/library/ms972974.aspx
在决定不使用数据库之前,我确信你最终不会有更多的产品。 MVC和WebForms都允许您创建一个动态显示产品的页面,并且仍然有一个很好的URL,您可以节省自己的开发时间。需要考虑的事情。