MVC3如何最小化控制器数量

3

我对MVC3不熟悉,我们的项目需要以下这样的东西:

http://www.abc.com/product_1/product_1_subpage/... http://www.abc.com/product_2/product_2_subpage/...

现在,我有一个“product_1”作为控制器;“product_1_subpage”作为该控制器下的操作。但是,考虑到我有超过100种不同的产品,我不能为每个单独的产品创建超过100个控制器,因此我需要在这个结构上做一些事情。你有什么想法吗?

非常感谢您的帮助,真的很感激任何建议。


也许考虑将您的默认控制器/操作接受产品和产品子页面参数。 - LukeH
3个回答

2
您可能希望仅使用一个名为“Products”的控制器来处理所有产品,而不是为每个产品都添加一个新的控制器。
通过自定义路由或默认路由,您仍然可以为每个产品生成单独的链接。此外,如果您按照为每个产品创建新控制器的方法(实际上您不应该这样做!),则每次想要添加另一个产品时都必须重新编译和部署应用程序,这将很难维护。
听起来您应该查看由.Net团队提供的MVC教程,以了解基本的MVC概念以及如何思考它。

是的,我知道这在现实中不会起作用,只是为了向老板展示一些东西,然后再转移到现实中。问题是办公室里的每个人都是MVC3的新手,没有人对这个新项目有任何意见。谢谢。 - DragonLady
@YanWang 我最好的建议是花几个小时浏览教程,也许看一些视频——这将在长期节省你的时间。当你学会使用Visual Studio等脚手架时,用正确的方式实现一些基本的CRUD操作将比按照自己的方式更快。我敢打赌,只要你掌握了基础知识,很快就能为你的老板实现一些基本功能! - Christofer Eliasson
是的,我已经看了那些视频和教程,但是当涉及到各种为了SEO目的的要求时,我需要更加关注设计方面。谢谢。 - DragonLady
那不可能是真的。克里斯托弗是正确的,你应该使用单个产品控制器,并通过id查找适当的产品。让MVC路由为您完成此操作。最好的SEO是良好的内容,而不是URL中是否有特定字符。如果违反REST约定,您很可能会受到更严厉的惩罚,而不是没有“_”字符。 - mfanto
非常感谢,我会进行更多的研究来解决这个问题。 - DragonLady

1

使用自定义路由:

routes.MapRoute(
            "ProductsRoute", // Route name
            "products/{productName}/{subName}/{id}", // URL with parameters
            new { controller = "Product", action = "View", id = UrlParameter.Optional } // Parameter defaults
        );

这将使下列工作实现:
public class ProductController : Controller
{
    // http://yourweb/products/goggles/xray/Elite2000
    public ActionResult View(string productName, string subName, string id)
    {
    }
}

0

把URL的格式稍微改一下,以利用路由功能,怎么样?

http://www.abc.com/product/subpage/1

抱歉,我们的老板需要“-”符号用于 SEO 目的。非常感谢你。 - DragonLady

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接