2013-11-23 4 views
0

У меня есть модели (POCO лиц) как Student, Course, Standard и т.д. У меня есть соответствующие контроллеры, такие как StudentController и т.д. У меня есть мнение Index для каждой модели, которая отображает список всех соответствующих объектов в БД. Например, StudentController.Index() возвращает вид /Student/Index. Однако, если в базе данных нет записей Student, вместо того, чтобы возвращать вид Index, я перенаправляю на метод действия Empty контроллера , то есть NavigationController.Empty(), который возвращает вид /Navigation/Empty. Это делается для всех классов объектов модели.Как вернуться к предыдущему виду через гиперссылку в ASP.NET MVC?

Теперь, на пустой странице, я хочу иметь гиперссылку, чтобы вернуться на предыдущую страницу. Поэтому я создал метод действия GoBack() в классе NavigationController, в котором я перенаправляю предыдущее представление. Но как я могу получить доступ к информации о том, что предыдущая страница была в этом методе действий? Или есть лучший способ сделать это? Я не хочу использовать кнопку «Назад».

+0

Если вы строите app- подобный сайт, вы можете исследовать архитектуру SPA (одностраничное приложение) http://en.wikipedia.org/wiki/Single-page_application – jfrankcarr

ответ

1

Насколько я могу судить, здесь есть несколько маршрутов. Вы можете использовать сеансы или кеш приложения для хранения страницы, просмотренной las, а затем получить эту страницу (например, путем хранения маршрута) в действии GoBack(), используя RedirectToAction.

Но, возможно, более приятный и безгражданный aproach будет представлять гиперссылку, имея модель представления, имеющую два свойства для последнего используемого контроллера &. Затем вы можете передать их из результата действия, вызывающего действие /Navigation/Empty (когда нет записей).

ViewModel

public class NavigationVM 
{ 
public string LastAction {get;set;} 
public string LastController {get;set;} 
} 

Навигационный контроллер Действие

public ActionResult Empty(string lastAction, string lastController) 
{ 
var vm = new NavigationVM() 
{ 
LastAction = lastAction, 
LastController = lastController 
} 
return View(vm); 
} 

Посмотреть

@model = Namespace.NavigationVM 

@Html.ActionLink("LinkName", Model.LastAction, Model.LastController) 

EDIT

Если вам нужно узнать, откуда был вызван контроллер ученика (в вашем примере), вы можете сделать это одинаково. I.e .: Проведите ссылку на StudentsController с дополнительными значениями маршрута.

StudentController:

public ActionResult Index(string lastAction, string lastController) 

{ 
    .... // no students 
return RedirectToAction("Empty", "Navigation", new RouteValueDictionary(new { lastAction = "Index", lastController= "Student"})); 

} 

Вид с гиперссылкой студентов контроллера (используйте действие и контроллер, вынесший эту точку зрения lastAction и lastController соответственно):

@Html.ActionLink("Get students", "Index", "Student", new { lastAction= "Index", lastController = "CallingController" }, null) 
+0

Ok. Это решение позволит мне сделать динамическую гиперссылку «Вернуться назад». Но мне все равно придется передать контроллер и действия, которые привели меня к методу действия «/ Student/Index», к методу '/ Navigation/Empty'. Откуда мне получить эту информацию? Другими словами, когда вызывается метод действия '/ Student/Index', мне нужно знать, откуда он был вызван, чтобы я мог передать эту информацию методу'/Navigation/Empty'. –

+0

Просмотр редактирования для примера. – bump

Смежные вопросы