小编han*_*olo的帖子

使用自定义段变量设置ASP.Net MVC 4路由

我刚刚开始研究一个有几个区域的应用程序(基本网格主/系统细节类型......)我正在研究利用MVC中的漂亮路由功能(特别是4个)而我"只是没有得到它"我相信.

目前唯一定义的路线是基本路线:

routes.MapRoute("Default", 
            "{controller}/{action}/{id}", 
            new { controller = "Account", action = "Index", id = UrlParameter.Optional }
        );
Run Code Online (Sandbox Code Playgroud)

这很好,它适用于我们定义的区域,所以我假设它必须知道用户在哪里,并根据用户所在的位置/区域上下文路由到相应的控制器..到目前为止很好..

现在,我正在尝试建立一条可以处理的新路线

/someController/someAction/{statusName} 
Run Code Online (Sandbox Code Playgroud)

特别是:

/OrderManager/List/New 
Run Code Online (Sandbox Code Playgroud)

/OrderManager/List/Viewed
Run Code Online (Sandbox Code Playgroud)

其中"新"是"新"状态,并且Action Signature看起来像:

public ActionResult List(string statusName)
Run Code Online (Sandbox Code Playgroud)

我假设我可以添加新的路由低于默认的路由标识"statusName"而不是Id,但当然,H将如何路由机制知道之间的区别:

/控制器1 /动作1/15

/控制器2 /动作2 /新

我确实尝试添加一个"静态"路径的形式

routes.MapRoute("Default", 
            "ControllerName/ControllerAction/{statusName}", 
            new { statusName = UrlParameter.Optional }
        );
Run Code Online (Sandbox Code Playgroud)

我以为我可以"hiJack"只是一条路线,并做一些特殊的事情,但要知道有用,路由器在第一场比赛停止?我认为无论如何这是解决这个问题的错误方法..

所以现在我想要达到这样的想法:

/somecustomroutename/somesortValue
Run Code Online (Sandbox Code Playgroud)

恩./ OrderManagerList/viewNew

这些路线基本上是"别名".我原以为添加以下路线就可以了:

 routes.MapRoute("Default_List",
          "OrderManagerList/{statusName}",
          new {controller="OrderManager", action="List", statusName= UrlParameter.Optional }
      );
Run Code Online (Sandbox Code Playgroud)

与OrderManager控制器上的相关操作:

public ActionResult List(string statusName)
Run Code Online (Sandbox Code Playgroud)

无论我尝试什么,参数都为null,或者"无法找到资源"

我知道控制器需要有一个相应的View文件..但这不是问题,问题是我尝试理解路由..

所以我的问题......从根本上说,我对MVC(4)中的路由缺少什么?甚至一些像我这样的傻瓜能够理解的好文章?

我的理解; 定义路线,并映射它的"端点"..然而,我想我不理解机器正在制造的假设.

无论如何,如果需要进一步解释/编辑,请告诉我..

提前致谢.

asp.net-mvc routing asp.net-mvc-routing asp.net-mvc-4

4
推荐指数
1
解决办法
1万
查看次数

DDD和MVC:Contoller从Factory not Repository获取AggregateRoot?是吧?

我最近开始了一个带有现有数据库(Oracle)和MVC 4的项目.很多编码已经发生..但代码中没有"策略"......只有DB - > ORM - > Controller.所以我试图为开发添加一些耀斑以及实践一些DDD开发技术.

我已经定义了一些聚合根,每个都有一个存储库,用于处理保存和删除(及其子代)等.其中一个聚合根引用另一个聚合根,它通过它来处理它的"子对象"它.

例:

A Client has one or more purchase orders which has Line Items, 
if a client wants to add a line item to the purchase order, 
it has to go through the purchase order.
Run Code Online (Sandbox Code Playgroud)

那很好..客户端聚合根,采购订单聚合根.

现在,一些服务也出现了,就像修改采购订单状态的服务一样,它消除了采购订单AR的负担,并且它很好,干净且有用(它可以被其他"事物"用来更新采购订单的状态),(也许应该是采购订单AR的一部分?一个小细节..)

存储库目前正在完成从数据库中保存数据并用数据"填满" AR的工作.当AR "保存"它时,存储库会保存任何需要保存的东西.采购订单存储库由客户AR使用,因此客户可以加载它可能包含的任何采购订单.希望我走在正确的轨道上.

现在,输入MVC.所以我也有了一些ViewModel,它基本上是显示需要向用户输出的内容的定义.Automapper已经证明了frickin非常棒,所以我可以"自动映射"到视图模型.没有大脑需要,完美..

现在,实施细节真的让我失望..

控制器当前正在通过客户工厂工作,客户工厂返回客户AR,然后可以执行采购订单列表控制器需要执行的任何操作,即管理相关的采购订单(作为一个整体,而不是采购订单详细信息或这种情况下的数据).

所以现在我想确保这是正确的...因为我看到很多例子都让控制器使用存储库,而不是工厂,但我也看到工厂被推荐用于创建AR ..这让我相信在示例中,控制器正在处理聚合根,但是这需要"消费者"必须查询AR才能获得AR:

喜欢:

Get the Client Aggregate where the ClientID is 15
Run Code Online (Sandbox Code Playgroud)

或者更好的是:

get the Client …
Run Code Online (Sandbox Code Playgroud)

domain-driven-design factory repository aggregateroot

2
推荐指数
1
解决办法
1543
查看次数