我正在显示给定订单的项目列表.当用户单击"添加项目"时,我会重定向到"项目/创建"页面.此页面收集必要的输入,但也需要知道该项目所属的订单ID.将OrderID传递给Item/Create的适当方法是什么,以便在保存新创建的项目时它能够在表单发布后保留.
我已经使用TempData并通过Html.Encode()在详细信息页面上编写了id.它让我在那里的一部分方式是id显示在项目表单上,但是当表单提交和发布时,值会丢失.我想因为它不是形式收集的一部分.我猜测我的解决方法不是最好的方法,并且想知道是否有人可以指出在asp.net mvc中执行此操作的正确方法.
我通过为包含 OrderId 的 Item 控制器创建新路由来实现此目的。没有订单的项目是没有意义的,因此需要使用约束参数来提供 OrderId。
routes.MapRoute(
"OrderItems",
"Item/{action}/{orderId}/{id}",
new { controller = "Item" },
new { orderId = @"d+" }
);
Run Code Online (Sandbox Code Playgroud)
因此 url 看起来像http://<sitename>/Item/Create/8,其中 8 是要为其创建项目的 OrderId。可以对带有 的删除操作路由执行类似的操作http://<sitename>/Item/Delete/8/5,其中 8 是 OrderId,5 是 ItemId。
您的操作方法将如下所示:
public ActionResult Create(int orderId)
public ActionResult Delete(int orderId, int id)
Run Code Online (Sandbox Code Playgroud)
您还可以对其进行设置,使网址看起来像这样http://<sitename>/Order/8/Item/Create,http://<sitename>/Order/8/Item/Delete/5如果这似乎更清楚地显示正在发生的事情。
那么路线将如下所示:
routes.MapRoute(
"OrderItems",
"Order/{orderId}/Item/{action}/{id}",
new { controller = "Item" },
new { orderId = @"d+" }
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4540 次 |
| 最近记录: |