2016-07-13 4 views
0

Я использую ASP.NET MVC с фреймворком AngularJs. В моем домашнем контроллере я проверяю, если есть действительная лицензия, и если нет, то я переориентировав на страницу, чтобы импортировать лицензию с этим кодом:Обнаружение перенаправления на другой URL-адрес

public ActionResult Index() 
 
     { 
 
      var retVal = _licenseProvider.ValidateExistingLicense(); 
 

 
      if (!retVal.Item1) 
 
      {     
 
       Response.Redirect("DataMaintenance/ImportLicenses", true); 
 
       return View("DataMaintenance/ImportLicenses"); 
 
      }

Итак, в мой контроллер ImportLicenses Я хочу обнаружить, что меня перенаправили против вызова из меню. Я нашел более старый поток о перенаправлении на другое действие, но это решение не применяется. Какие у меня варианты?

+1

Могу ли я спросить, почему вы используете Response.Redirect вместо Response.RedirectToAction? –

+0

Потому что это другой контроллер в другом месте. – Naomi

+1

Вы можете использовать RedirectToAction для перенаправления на разные области: 'return RedirectToAction (« Index »,« ImportLicenses », new {area =« DataMaintenance »}' –

ответ

0

В то же время я решил немного обмануть, но это сработало. В меню я изменил первоначальный вызов этой

dataMaintNodes.SubNodes.Add(new MenuMapNode() { LabelKey = "importLicense", Action = "ImportLicenses", Controller = "ImportLicenses", Area = "DataMaintenance", Icon = "", Roles = "IMPORTLIC" });

Другими словами, вместо обычного действия индекса я ввел другое действие. Я добавил, что новое действие для моего контроллера и просто установить свойство ViewBag на false при вызове из меню и в true в действии Index, которое вызывается Redirect. Итак, это мошенничество, но оно работает. Я только хотел отобразить кнопку Отмена в этом модальном диалоговом окне, когда я звоню из обычного меню, и кнопку «Отмена» при вызове с домашнего контроллера. Теперь моя вторая проблема заключается в том, что Modal Dialog на самом деле не предотвращает выход из нее и продолжает работать с приложением. Таким образом, мы можем захотеть ввести больше логики.

1

У вас есть несколько вариантов здесь:

  1. Добавить параметр строки запроса в действии ImportLicenses что определяет, получил ли пользователь здесь с помощью редиректа или меню

  2. Установите TempData перед перенаправлением вашего пользователя на действие ImportLicenses.

  3. Используйте Session переменной

Read this for more information about passing data between Action methods.

1

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

Существуют и другие варианты, такие как использование состояния сеанса или параметр строки запроса. Параметр querystring может быть столь же эффективным, как и идея cookie, о которой я упоминал выше, и это было бы немного чище.

Если вы можете предоставить более подробную информацию о вашем прецеденте, я могу расширить свой ответ.

Надеюсь, это поможет.

0

Я просто попробовал другое решение, основанное на комментариях в этой теме и потоке, который я видел ранее. Я использовал Response.Метод RedirectToAction (как комментарий предложил) и я добавил этот код:

 protected override void OnActionExecuted(ActionExecutedContext filterContext) 
 
     { 
 
      ViewBag.needValidLicense = false; 
 
      if (filterContext.Result is RedirectResult) 
 
      { 
 
       ViewBag.needValidLicense = true; 
 
      } 
 

 
      base.OnActionExecuted(filterContext); 
 
     }

Однако, это не работает, например, результат не показывался как RedirectResult. Я вернусь к оригинальному решению использовать отдельное действие при вызове из меню.