返回从另一个Controller生成的视图

时间:2012-09-26 15:31:36

标签: asp.net asp.net-mvc view

假设有一个“产品”区域和两个控制器“Home”和“Suite”(在这种情况下会有更多的控制器像“套房”一样)。

我配置了“ProductAreaRegistration.cs”,以便URL看起来像这样:

  

\ Products \
  (with controller =“Home”,action =“Index”)

     

\ Products \ Suite
  (使用controller =“Suite”,action =“Index”)

     

\ Products \ Suite \ TechnicalSpecification
  (使用controller =“Suite”,action =“TechnicalSpecification”)

“TechnicalSpecification”操作出现在该区域的每个控制器中,但“Home”控制器是那个,我实际上是主要工作。像“Suite”这样的其他控制器只是执行一些与控制器相关的操作,然后重定向到“Home”,“TechnicalSpecification”:

// Suite-Controller
public ActionResult TechnicalSpecification()
{
    //doSomethingThatOnlyThisControllerHasToDo();

    return RedirectToAction("TechnicalSpecification", "Home", new { specificationId = 45 });
}

// Home-Controller
public ActionResult TechnicalSpecification(int specificationId)
    {
        Object model = getModelByIdWithSomeMethod(specificationId);
        //DoEvenMoreThingsHere();

        return View(model);
    }

我的问题是,当我查看“套件”链接时,“技术规格”显示了 \产品\套件\ TechnicalSpecification

但点击该链接后,地址栏中的网址将变为
\产品\ TechnicalSpecification?specificationId = 45

因为重定向。我希望URL保持如下所述。

因此,不是“返回RedirectToAction(...)”,而是“返回ViewResultFromOtherController(...)”,这样就不会重定向?

希望你明白了。
如果没有,请问!
提前谢谢!

1 个答案:

答案 0 :(得分:0)

可能有一种比这更好的方法,但您可以尝试在Action中实例化其他控制器,调用方法并返回其结果。这会留下您发布的相同网址,但会为您提供其他方法的结果。

类似的东西:

Controller home = new HomeController();
return home.TechnicalSpecification(specificationId);

但这确实要求重构。

相关问题