我有一个 Controller 类,其中包括以下方法:-
namespace SV.Controllers
{
public class VMController : Controller
{
public void populateViewData(IEnumerable<VM> vms)
{
//code goes here
现在,如果我在另一个控制器类上,我该如何调用该VMController.populateViewDate
方法??
我有一个 Controller 类,其中包括以下方法:-
namespace SV.Controllers
{
public class VMController : Controller
{
public void populateViewData(IEnumerable<VM> vms)
{
//code goes here
现在,如果我在另一个控制器类上,我该如何调用该VMController.populateViewDate
方法??
在我看来,使用其他控制器的辅助方法是一种不好的做法/设计。您应该将这些方法重构为可以从两个控制器访问的辅助类。简单的例子:
public static ViewDataHelpers
{
public static void PopulateViewData(IEnumerable<VM> vms)
{
// ...
}
}
现在您可以在任何控制器中使用它:
ViewDataHelpers.PopulateViewData(viewModels);
如果您愿意,也可以将其更改为扩展方法:
public static void PopulateViewData(this IEnumerable<VM> vms)
{
// ...
}
控制器中的调用将如下所示:
viewModels.PopulateViewData();
这只是语法糖,结果是一样的。
我认为你不应该增加控制器之间的依赖关系。每个人都有自己的工作要做。如果您需要它们之间的通用方法或属性,您可以创建一个基本控制器类:
public abstract class BaseVMController : Controller
{
protected virtual void PopulateViewData(IEnumerable<VM> vms)
{
// ...
}
}
public class VMController : BaseVMController
{
public void NewMethod()
{
IEnumerable<VM> vms;
PopulateViewData(vms);
// ...
}
}
public class VMController2 : BaseVMController
{
public void NewMethod2(IEnumerable<VM> vms)
{
PopulateViewData(vms);
// ...
}
protected override void PopulateViewData(IEnumerable<VM> vms)
{
base.PopulateViewData(vms);
// some additional behavior ...
}
}
另一个很好的可能性是在 Henk Mollema 的回答中,有一个助手类。
编辑:一些小的调整
控制器只是一个类,就像任何其他类一样。
using SV.Controllers;
namespace SV.Controllers2
{
public class VMController2 : Controller
{
public void NewMethod()
{
//instanciate vms here....
IEnumerable<VM> vms;
VMController controller = new VmController();
controller.populateViewData(vms);
}
}
}
除了利亚姆的回答之外,您还可以从您的操作中执行以下操作:
IEnumerable<VM> _vms;
return RedirectToAction("VM", "populateViewData", new { vms =_vms });