2013-12-16 19 views
2

假設我在MVC中有一個默認項目。我將About鏈接更改爲Ajax表單,以便它只加載頁面的這一部分。當然,我改變方法返回PartialView('About')而不是View('About')。但是,當用戶輸入並轉到名爲localhost:port/Home/About的鏈接時會出現問題。現在它加載了一部分,但沒有佈局(沒有CSS,JS,菜單欄等)!我怎樣才能防止他進入這樣的頁面?或者,也許顯示一個錯誤頁面呢?甚至重定向他去View('About')?期權是無止境的,但如何知道這次通話是以「錯誤」的方式?如何區分調用是否是ajax,並在MVC中相應顯示頁面?

+0

可能重複[如何知道請求是否是asp.net mvc中的ajax?](http://stackoverflow.com/questions/3864179/how-to-know-if-the-request-is-ajax- in-asp-net-mvc) – Zabavsky

+1

你爲什麼在意?如果用戶輸入該鏈接,那麼他應該得到他所得到的。 –

+0

@JohnSaunders有趣的觀點! –

回答

3

添加ChildActionOnly屬性來控制方法,以便MVC不會讓用戶把它directly via http://localhost:port/Home/About

+0

非常有趣!聽起來很有希望!當我從工作中回來時肯定會嘗試那個:) –

+0

請求會發生什麼?它將在哪裏重定向? –

+0

沒有。此URL不會被映射到控制器操作,因爲它被標記爲「ChildActionOnly」屬性。然而,可以使用'Html.Action(..)'幫助器來呈現部分內容,並且它將起作用,因爲此調用被限定爲正在執行的另一個操作的子項。 –

0

爲@Zabavsky它似乎是一個重複...

另一個(很簡單)的解決方案可能是隻seprate方法。無論如何,你有獨立的意見。所以ajax調用將觸發AboutAjax()並呈現partialView和About()保持原樣。

相關問題