【发布时间】:2010-08-18 01:56:45
【问题描述】:
tldr> 选择客户后,所有其他控制器如何在不手动传递 ID 的情况下始终在该客户的“上下文”中执行其操作?
我正在尝试找出“正确”的方法来处理整个控制器(或更多)都依赖于前一个控制器的想法的情况。例如,假设您正在构建某种客户管理系统。会有各种各样的客户功能,可能位于 CustomerController。但是当您进入订单管理时,您可能希望拥有一个 OrderController。
如果您只有一个 OrderController,您的方法可能如下所示:
public ActionResult Edit(string id){...}
id 将是订单的 id,对吗?我有点迷失的地方是当我需要回到客户那里时。这就像所有发生的行为的“背景”都在客户内部。您可以通过始终将客户 ID 添加到操作 (URL) 中来做到这一点:
http://site.com/Orders/Edit/1234?customerId=abc
但是,抓住该价值并将其干扰到每个动作中似乎变得相当乏味。有 Session 之类的选项,但看起来很草率。
这样做的正确方法是什么?
【问题讨论】:
-
为什么你认为使用 session 很草率?听起来像是一个完美的用例。
-
我想我只是以这种方式查看会话。是的,它可以在这里工作,但是如果你尝试扩展等,就会出现问题。我通常会避开会话,就像我一直避免使用全局变量一样——它们可以工作,但它们有自己的问题。
-
使用会话的另一个重要因素是用户不能为任何子页面添加书签,因为它们需要创建上下文。通过在 URL 中嵌入您需要的所有内容,用户可以直接返回到他们想要的任何页面。
标签: c# asp.net-mvc-2