Action需要多个控制器才能执行

时间:2016-01-27 19:46:05

标签: asp.net asp.net-mvc

我有一个具有Destroy功能的UserController。这是一个相当复杂的功能,因为它需要销毁所有用户的数据。我在管理面板中执行了另一个操作,删除了一组特定用户的所有数据。

由于我不想从UserController复制代码,我想从UserController为每个用户调用Destroy函数来销毁它的数据。

我该怎么办?

提前致谢。

3 个答案:

答案 0 :(得分:2)

为什么不将此功能移动到可以根据需要从两个控制器访问的公共类方法?

public class UserManager
{
  public void Destroy(List<int> userIdsToDestroy)
  {
    foreach(var userId in userIdsToDestroy)
    {
       //Execute code to destroy
    }
  }
}

从您的操作方法中,您可以将其称为

var mgr = new UserManager();
var badUsers  = new List<int> { 1,2,3};
mgr.Destroy(badUsers);

根据您调用它的位置,根据需要更新badUsers变量值。

答案 1 :(得分:0)

这样的共享功能最好是在业务层中,两个控制器都会调用该代码。如果它是一个小应用程序,您可以为共享代码创建一个单独的文件夹结构。较大的项目将具有业务层dll。

答案 2 :(得分:0)

为什么不将Destroy()方法设为Non-Action方法,然后再使用

[Non-Action]
public void Destroy(User user)
{
  // code goes here
}

您也可以将此Destroy()功能作为业务层逻辑的一部分,而不是在控制器中处理此功能。在这种情况下,你可以从任何地方调用它。

如果你想让它成为@controller,你也可以考虑使用usig [ChildActionOnly]动作过滤器属性。