2012-09-26 53 views
0

假設有一個區域「Products」和兩個控制器「Home」和「Suite」(在這種情況下會有更多控制器會像「Suite」一樣運行)。返回從另一個控制器生成的視圖

我配置了 「ProductAreaRegistration.cs」,這樣的URL看起來像這樣:

\產品\
(帶控制器= 「家」,行動= 「指數」)

\產品\套件
(帶控制器= 「套件」,動作= 「索引」)

\產品\套件\ TechnicalSpecification
(帶控制器=「套件「,action =」TechnicalSpecification「)

」TechnicalSpecification「動作出現在該區域的每個控制器中,但」Home「控制器是唯一的,而wo實際上是主要工作。其他的控制器,如「套房」只是做一些控制器相關的東西,然後重定向到「家」,「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

但點擊後,在地址欄的變化鏈接的URL
\產品\ TechnicalSpecification?specificationId = 4 5

由於重定向。我希望URL保持前面提到的狀態。

因此,而不是「返回RedirectToAction(...)」有沒有像「返回ViewResultFromOtherController(...)」,以便它不重定向?

希望你有想法。
如果不是,請詢問!
在此先感謝!

+0

爲上帝的緣故!這不是經典的 - asp是asp.net !!!!! – Rafael

+0

不需要憤怒 - 但感謝提醒和編輯標籤:) –

回答

0

可能有比這更好的方法來做到這一點,但你可以嘗試實例化Action中的其他控制器,調用方法並返回其結果。這會給你留下你發佈的相同URL,但會給你另一種方法的結果。

喜歡的東西:

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

這不乞求重構,雖然。

+0

謝謝! :) 是的,也許有更好的辦法,但這對我來說是伎倆。 之後,我只需將.cshtml文件移動到「共享」文件夾中,然後一切都很順利。 –

相關問題