У меня есть раскрывающееся меню на моей главной странице, которая содержит список отделов. Теперь у меня есть несколько страниц, на которых отображается список записей, основанных на выборе и изменении отдела.Как перенаправить пользователя на основе раскрывающегося списка главной страницы с помощью сеанса?
Поэтому, когда пользователь выбирает новый отдел из раскрывающегося списка, я делаю вызов 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 листья и т.д.).
Невозможно понять, что вы пытаетесь сделать с этим кодом. Весь смысл ajax состоит в том, чтобы оставаться на одной странице, и все, что вы делаете, перенаправляет на обратный вызов успеха. Не используйте ajax (в данном случае это бессмысленно). Сделайте нормальный файл submit и в методе POST переадресовывайте соответствующий метод. –
Я пытаюсь сохранить новое значение отдела в сеансе при изменении раскрывающегося списка отделов. У меня есть много страниц (/ Employee/Skill,/Payroll/Salary), которые доступны только тогда, когда пользователь выбирает отдел, потому что записи на этих страницах управляются отделом По умолчанию в раскрывающемся меню отдела будет выбран «Выбрать отдел», и пользователь будет включен/Employee/List, поэтому теперь, когда пользователь выбирает соответствующий отдел, пользователь сможет увидеть эту страницу (Skill, Salary) в пунктах меню. –
Проблема в том, когда пользователь выбирает какой-либо отдел и переходит на страницу, например:/Employee/Skill, и теперь пользователь открывает новую страницу на новой вкладке и снова делает выбор из раскрывающегося списка отделов для выбора «Выбрать отдел» и обновляет/страницу Employee/List, затем пользователь остается на этой странице, но теперь значение сеанса будет 0 в случае «select department», а затем как пользователь не перенаправляет/Employee/List? –