假设有一个“产品”区域和两个控制器“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(...)”,这样就不会重定向?
希望你明白了。
如果没有,请问!
提前谢谢!
答案 0 :(得分:0)
可能有一种比这更好的方法,但您可以尝试在Action中实例化其他控制器,调用方法并返回其结果。这会留下您发布的相同网址,但会为您提供其他方法的结果。
类似的东西:
Controller home = new HomeController();
return home.TechnicalSpecification(specificationId);
但这确实要求重构。