2011-06-30 64 views
0

在控制器中,是否可以從另一個控制器返回動作視圖?另一種選擇是返回一個局部視圖,它使用Html.Action(...)從另一個控制器返回視圖,但我想知道是否有更清潔的東西。謝謝。MVC2 - 可以從不同的控制器調用操作?

+6

你的問題的標題和正文不同意。你是在詢問關於調用另一個控制器的* action *或者僅僅是爲另一個控制器構建的* view *嗎? – StriplingWarrior

回答

1

最後我用我原來的解決方案,它是具有共同看法是調用一個動作。它比我所需的代碼少得多。謝謝。

1

是的,如果該視圖是共享視圖。將視圖放置在MVC項目的Views/Shared文件夾中,然後這兩個控制器將能夠返回它。

+0

雖然這是真的,但如果你想加載一個技術上指定給不同Controller的View,那麼@ Marnix的答案是正確的。 –

4

如果它只是您想要重用的視圖,則可以將路徑傳遞給視圖。例如:

public ActionResult MyAction() 
{ 
    // do your model magic here 
    return View("~/Views/OtherController/View.aspx", model); 
} 

或者你也可以像凱爾已經提出的觀點移到Views/Shared

-1

這裏有一個策略,我用它來調用另一個動作,而無需只爲這一目的創建一個特殊的視圖:

創建共享視圖這需要定義一個動作,控制器和RouteValues,以及其唯一的模型責任是用該模型上的值調用RenderAction。

接下來,在基本控制器類上創建一個幫助器方法,該方法將Action,Controller和RouteValues作爲參數,並返回此共享視圖的ViewResult。這樣,您可以隨時在所有控制器上重複使用此幫助程序方法和共享視圖,以便隨時從其他操作的上下文中渲染其他操作。

當然,如果它只是視圖而不是你想調用的動作,Marnix的回答是正確的。

+1

-1對於沒有解釋的人來說不會幫助任何人。 – StriplingWarrior

+0

這種感覺真的很笨拙。使用視圖來影響哪些控制器運行感覺就像是在篡改MVC模型。 –

+0

@Simon Halsey:我想可能會認爲'RenderAction'的整個想法正在破壞MVC模型。不過,這有助於防止大量重複的代碼。利用'RenderAction'方法使一個控制器更容易調用另一個控制器上的子操作,同樣可以幫助重複使用代碼。不過,我很欣賞這些反饋。如果你發現一種不太笨拙的方式,我希望你會與我們分享。 – StriplingWarrior

相關問題