如何知道我需要哪个RedirectToAction?

时间:2015-04-05 00:00:54

标签: c# asp.net-mvc

我已经创建了一个基本控制器,我的另外两个控制器来自这个控制器,以避免代码重复。

已经 2个ActionResult在这些控制器中大约有80行,而79行是相同的。唯一的区别是ActionResult结束时的重定向操作。

我的问题是:有没有办法知道需要调用哪个RedirectToAction,即我们需要返回哪个控制器?

2 个答案:

答案 0 :(得分:2)

首先,除非您绝对需要,否则请避免使用基本控制器。他们倾向于成为分享东西的倾销场所,而你最终只会因为它更容易而只适用于你的几个控制器。

最好将其作为不使用它们的政策,并且只在必要时才制作例外。

除此之外,控制器真的应该精益求精。如果您的Controller是80行代码,它会告诉我您正在控制器中执行业务逻辑。您应该在业务层中拥有该逻辑。更重要的是,你可能违反了单一责任委托人。

通过使用辅助类,您可以在没有基本控制器的情况下获得相同的结果。例如,你可以这样做:

public static class MyHelper
{
    public static Foo DoSomething() { return new Foo();  }
}

public class MyController1 : Controller
{
    public ActionResult Index()
    {
        var result = MyHelper.DoSomething();
        return File(...);
    }
}

public class MyController2 : Controller
{
    public ActionResult Index()
    {
        var result = MyHelper.DoSomething();
        return JSON(...);
    }
}

答案 1 :(得分:1)

不直接,您可以检查模型中的某些条件并将重定向包裹在if周围。或者,添加查询字符串参数:

public ActionResult MyAction(MyModel model, string actionRedirect = null)