2013-06-25 1 views
0

Прежде всего, да, я знаю, что я не должен использовать фреймы, но у меня нет выбора. Это старая система, которая вызвала у меня ничего, кроме головных болей, но сетевые инженеры любят ее и требуют, чтобы это было там, где их информация и страницы должны были идти.Получите URL-адреса переменных и перейдите к Codebehind

В настоящее время я использую платформу .NET 4.0, C#, и, хотя я сомневаюсь, что это важно для этого вопроса, SQL Server 2008R2.

Проблема, как она стоит прямо сейчас: Мне нужен способ, чтобы определить, будет ли выбран основной или резервный аппаратный, так что я могу правильно установить переключатель и начальную информацию о загрузке страницы в либо первичного оборудования или на основе которой загружается страница. Веб-сайт, на котором моя страница используется, является третьей стороной, которой у меня нет доступа к изменению, поэтому я не могу просто привязать переменные URL к этой странице или изменить настройки.

URL-адрес имеет переменные, но они создаются статически в другом месте на веб-сайте и видны только внутри фрейма, в котором находится моя страница. Я никогда не использовал фреймы, поэтому я немного потерял. Хуже того, из-за того, как это настроено и проверено, я на самом деле не уверен, как настроить любые точки останова в коде, чтобы увидеть, где он не работает.

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

До сих пор я рассматривал их для руководства, но не имел большого успеха. sharing variables between urls and frames, msdn's .NET 4.0 page on Frames, сообщение о том, как get url variables out of frames, и loading pages in IFrame dynamically from the codebehind.

На данный момент меня попросили убедиться, что страница в ее нынешнем виде не сломается, поэтому это проверяется, а не просто делается. В настоящее время он находится в двух местах на этом сайте: один без фреймов и переменных URL (которые администраторы хотят удалить) и новый дом с переменными URL и фреймами. На данный момент, первый не может сломаться, поэтому вы увидите немного странную проверку и? оператор.

 protected void Page_Load(object sender, EventArgs e) 
     { 

      if (!IsPostBack) 
      { 
       System.Web.UI.HtmlControls.HtmlGenericControl orionIFrame = 
         (System.Web.UI.HtmlControls.HtmlGenericControl)this.FindControl("pcmaframe"); 
       if (orionIFrame != null) 
       { 
        string frameURL = orionIFrame.Attributes["src"].ToString() ?? ""; 

        Uri frameURI = new Uri(frameURL); 

        NameValueCollection queryVars = HttpUtility.ParseQueryString(frameURI.Query); 

        //If this is in Orion, we want to change the canceller to standby if it's 97, not 96 
        if (queryVars["NetObject"] == "N:97" || queryVars["NetObject"] == "N%3a97") 
        { 
         SelectCanceller.SelectedValue = "Standby"; 
         primaryStandby = false; 
        } 
       } 
//Do some other stuff to generate page data 

Прямо сейчас, код, который генерирует кадр выглядит следующим образом (где [URL] заменяет фактический URL и [MyPage] заменяет фактическое имя файла я использовал):

NodeID - ${NodeID}<br> 
Node Name - ${NodeName} 

<iframe id="pcmaframe" src="[url]/[mypage].aspx?NetObject=N:" + ${NodeID} width = 1000 height = 1500> 
</iframe> 

На данный момент нет плохого поведения, он просто не переключается. Обе страницы отображают первичный, независимо от переменных URL. Первичное - N: 96, а вторичное - N: 97. Причина, по которой я проверяю, заключается в том, что мне бы хотелось, чтобы она отображала что-то в случае сбоя, поэтому по умолчанию используется основное оборудование.

Итак, замечательные люди переполнения стека ... Можете ли вы ответить на любой из моих трех вопросов?

  1. Как устранить неполадки с кадром на отдельном веб-сайте без добавления вывода на страницу, если у меня нет возможности вставить точки останова?

  2. Что я могу сделать вместо использования переменных URL и возиться с этими фреймами?

  3. Какую логику я пропускаю или закручиваю в своем коде, который вызывает фрейм/not/распознает переменную URL?

UPDATE

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

ответ

0

После того, как ему разрешено добавлять выходные данные для отладки странице, мне удалось найти работу. То, что я считаю, что происходит, на основе некоторых испытаний и эти статьи:

FindControl() return null

Better way to find control in ASP.NET

http://msdn.microsoft.com/en-us/library/txxbk90b%28v=vs.90%29.aspx

http://forums.asp.net/t/1097333.aspx

http://msdn.microsoft.com/en-us/library/system.web.ui.page.previouspage.aspx

Это сайт, где моя программа/страница - b Используется фрейм на более высоком уровне, чем мой ASP имеет доступ без большого технического вуду. Поскольку кадр не возвращался, я начал тестировать и обнаружил, что вызывающий кадр фактически использует [URL]. [MyPage] .aspx? NetObject = N: 97 как предыдущая страница или вызывающая страница. Это справедливо при различных обстоятельствах, которые означали, что было полубезопасно использовать Request.UrlReferrer:

protected void Page_Load(object sender, EventArgs e) 
{ 

    if (!IsPostBack) 
    { 
     string frameURL = Request.UrlReferrer.ToString() ?? "NO DATA"; 

     if ((frameURL != null) && (frameURL != "NO DATA")) 
     { 

      Uri frameURI = new Uri(frameURL); 

      NameValueCollection queryVars = HttpUtility.ParseQueryString(frameURI.Query); 

      //If this is in Orion, we want to change the canceller to standby if it's 97, not 96 
      if (queryVars["NetObject"] == "N:97" || queryVars["NetObject"] == "N%3a97") 
      { 
       SelectCanceller.SelectedValue = "Standby"; 
       primaryStandby = false; 
      } 
     } 

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

  • Нет связанных вопросов^_^