我有两个不同的对象:合同和任务订单。我的要求指定为了查看任一对象的详细信息,Url应为“http://.../Contract/Details”或“http://.../TaskOrder/Details”,具体取决于哪种类型。它们非常相似,而且细节页面几乎相同,所以我创建了一个可以是契约或任务顺序的类,并且有一个变量“objectTypeID”来说明它是哪种类型。我在任务顺序控制器中编写了“详细信息”操作,但现在我想从合同控制器调用它而不是重新复制代码。
那么有没有办法让网址仍然说“... / Contract / Details”,而是调用TaskOrder控制器中的动作呢?我尝试使用
TaskOrderController TOController = new TaskOrderController();
TOController.Details(id);
除了我不能再使用HttpContext.Session之外,这本来有用了,我在动作中多次使用过。
答案 0 :(得分:1)
为什么要从控制器调用控制器?应通过路径调用控制器操作并返回视图。
如果您有两个独立控制器使用的公共代码,那么您应该将此代码抽象到另一个类。
答案 1 :(得分:0)
RedirectToAction("Details","To");
此外,如果需要,请添加路由参数。
此外,您可能需要一个BaseController类,这两个控制器继承并实现相同的Details操作,但基于objectTypeID执行稍微不同的操作。
答案 2 :(得分:0)
感谢大卫,我应该从视角中呼唤它。
我需要的只是我的Contract / Details.aspx页面中的以下行:
<%= Html.Action("Details", "TaskOrder", new { id = ViewData["id"] })%>
答案 3 :(得分:0)
为控制器创建基类。像DetailsController一样
将您的详细信息代码放在那里,让它接受typeId。 然后让你的两个控制器派生自该基类,并使其Details操作调用传入id
的基类