2016-10-05 3 views
3

У меня есть раскрывающееся меню на моей главной странице, которая содержит список отделов. Теперь у меня есть несколько страниц, на которых отображается список записей, основанных на выборе и изменении отдела.Как перенаправить пользователя на основе раскрывающегося списка главной страницы с помощью сеанса?

Поэтому, когда пользователь выбирает новый отдел из раскрывающегося списка, я делаю вызов AJAX моему контроллеру MVC и отправляю идентификатор отдела на этот контроллер и сохраняю его в сеансе и использую этот сеанс на всех страницах, так как все мои страницы управляются отделом.

Реализация:

@{ 
    int departmentId = 0; 
    int.TryParse(Convert.ToString(Session["departmentId"]), out departmentId); 
} 
<select id="department" name="department" class="form-control"> //filling dropdown based on departmentId 
</select> 

$(document).ready(function() { 
      $("#department").change(function() { 
       var departmentId = $(this).val(); 
       $.ajax({ 
        url: "@Url.Action("ChangeDepartment", "Home")", 
        data: { id: departmentId }, 
        success: function (e) { 
        if ('@departmentId' > 0) { 
          if (window.location.pathname == '/Employee/Skill') { 
         window.location.href = '/Employee/Skill'; 
         } else if (window.location.pathname == '/Payroll/Salary') { 
           window.location.href = '/Payroll/Salary'; 
       } else { 
        window.location = window.location; 
       } 
      } 
      else { 
       window.location.href = '/Employee/List'; 
      } 
       } 
       }); 
      }); 
     }); 
public JsonResult ChangeDepartment(int id) 
     { 
      Session["departmentId"] = id; 
      return Json(id, JsonRequestBehavior.AllowGet); 
     } 

Но теперь предположим, что пользователь находится на /Employee/Навыки страниц и когда пользователь открыть любую новую страницу и изменить значение отдела «ВЫБРАТЬ отдел» (идентификатор будет 0) , а когда пользователь обновит/Сотрудник/Навыки, то пользователь останется на этой странице, а не перенаправляется на страницу списка сотрудников (/ Сотрудник/Список).

Так как у меня много страниц, которые в основном значение отдел приводится так, когда я буду иметь Департамент ID = 0 Я хотел бы перенаправить пользователя на /Employee/List еще просто обновите страницу, на которой пользователь в данный момент и показать данные, основанные на department id.

Так что это хорошая идея написать такие условия для утери страниц или есть ли лучший способ справиться с этим?

Update

У меня есть следующие страницы:

Я следующие пункты меню:

1) EmployeeList

2) DepartmentList

3) Навыки

4) Заработная плата

5) LeaveManagement

6) Участники

7) Производительность

Теперь, когда пользователь будет войти в систему, то пользователь будет перенаправлен ниже страниц и будет видеть только 2 пункты меню, так как в настоящее время в отделе не будет отдела, который находится на странице макета:

http://localhost:2220/Employee/EmployeeList 

1) EmployeeList

2) DepartmentList

Теперь, когда мы находимся на http://localhost:2220/Employee/EmployeeList странице, так это в настоящее время список всех сотрудников всех отдела.

Когда пользователь выберет соответствующий отдел, я сделаю вызов AJAX контроллеру, чтобы сохранить идентификатор отдела, и который обновит мою страницу, поэтому теперь у меня будет идентификатор отдела, доступный в списке Employee, поэтому теперь я получу список сотрудников на основе отдела ID:

[HttpGet] 
     public JsonResult getEmployees() 
     { 
      int departmentId = 0; 
      int.TryParse(Convert.ToString(Session["departmentId"]), out departmentId); 
      if(departmentId==0) 
       EmployeeRepository.GetEmployee(0); 
      else 
       EmployeeRepository.GetEmployee(departmentId); 
     } 

Теперь после выбора отдел все остальные пункты меню будут отображаться (например, для: навыки, зарплата и т.д ..)

Теперь предположим, что пользователь нажимает на пункт меню навыков, то пользователь будет перенаправлен на http://localhost:2220/EmployeeSkills/Skills url, где снова я буду есть способ, как указано выше:

[HttpGet] 
     public JsonResult getSkills() 
     { 
      int departmentId = 0; 
      int.TryParse(Convert.ToString(Session["departmentId"]), out departmentId); 
      SkillRepository.GetSkills(departmentId);//sometimes i am getting error here because of Session["departmentId" becomes null 
     } 

http://localhost:2220/Employee/EmployeeList 
http://localhost:2220/Department/DepartmentList 

    http://localhost:2220/EmployeeSkills/Skills (Will not be accessible and visible without department selection) 
    http://localhost:2220/Payroll/Salary (Will not be accessible and visible without department selection) 
    http://localhost:2220/EmployeeLeave/LeaveManagement (Will not be accessible and visible without department selection) 
    http://localhost:2220/EmployeeAttendance/Attendance (Will not be accessible and visible without department selection) 
    http://localhost:2220/EmployeePerformance/Performance (Will not be accessible and visible without department selection) 

Причина: Именно поэтому я использую сеанс универмаге идентификатор для использования на всех других страницах (навыки, Payroll листья и т.д.).

+0

Невозможно понять, что вы пытаетесь сделать с этим кодом. Весь смысл ajax состоит в том, чтобы оставаться на одной странице, и все, что вы делаете, перенаправляет на обратный вызов успеха. Не используйте ajax (в данном случае это бессмысленно). Сделайте нормальный файл submit и в методе POST переадресовывайте соответствующий метод. –

+0

Я пытаюсь сохранить новое значение отдела в сеансе при изменении раскрывающегося списка отделов. У меня есть много страниц (/ Employee/Skill,/Payroll/Salary), которые доступны только тогда, когда пользователь выбирает отдел, потому что записи на этих страницах управляются отделом По умолчанию в раскрывающемся меню отдела будет выбран «Выбрать отдел», и пользователь будет включен/Employee/List, поэтому теперь, когда пользователь выбирает соответствующий отдел, пользователь сможет увидеть эту страницу (Skill, Salary) в пунктах меню. –

+0

Проблема в том, когда пользователь выбирает какой-либо отдел и переходит на страницу, например:/Employee/Skill, и теперь пользователь открывает новую страницу на новой вкладке и снова делает выбор из раскрывающегося списка отделов для выбора «Выбрать отдел» и обновляет/страницу Employee/List, затем пользователь остается на этой странице, но теперь значение сеанса будет 0 в случае «select department», а затем как пользователь не перенаправляет/Employee/List? –

ответ

2

Логика изменения местоположения вызывается только тогда, когда пользователь меняет выпадающий список (в пределах $ («# department»). Change()), также путем обновления он не вызывается. Переместите свою логику вне метода изменения, и она может работать.

+0

Но я думаю, что мне нужно обрабатывать маршрутизацию на стороне mvc, и мне приходится писать такие условия для всех страниц, так как у меня много страниц. Можете ли вы предоставить мне лучшее решение для этого, пожалуйста, –

+0

нет «стороны mvc», , Есть сторона клиента и сервер. для клиентской стороны, у вас это есть. для серверной части вы можете настроить маршрутизацию mvc или создать что-то вроде этого: http://stackoverflow.com/questions/3067908/session-is-null-in-iroutehandler-gethttphandler-with-asp-net-routing – Dexion

+0

Хорошо, у меня есть проверил это, но в этом ответе, как я буду поддерживать, что, если пользователь выбирает какой-либо отдел, а пользователь в настоящее время на странице позволяет сказать/Payroll/Salary, и если пользователь снова выбирает «select department (no department department)», то пользователь должен быть перенаправлен в/Employee/Страница списка, независимо от того, на какой странице пользователь в данный момент. –

0

Основываясь на значениях сеанса, вы можете перенаправить на разные страницы.

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