0

比方说,有一个“产品”区域和两个控制器“家庭”和“套件”(在这种情况下会有更多控制器像“套件”一样运行)。

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

\Products\
(控制器 =“Home”,操作 =“Index”)

\Products\Suite
(控制器 =“Suite”,操作 =“Index”)

\Products\Suite\TechnicalSpecification
(控制器 =“Suite”,操作 =“TechnicalSpecification”)

“TechnicalSpecification”动作出现在该区域的每个控制器中,但“Home”控制器是唯一的,wo实际上完成了主要工作。像“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);
    }

我的问题是,当我查看“Suite”、“TechnicalSpecification”的链接时,它显示
\Products\Suite\TechnicalSpecification

但单击该链接后,地址栏中的 URL 更改为
\Products\TechnicalSpecification?specificationId=45

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

所以不是“return RedirectToAction(...)”而是有类似“return ViewResultFromOtherController(...)”的东西,所以它不会重定向?

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

4

1 回答 1

0

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

就像是:

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

不过,这确实需要重构。

于 2012-09-26T16:01:06.440 回答