2014-10-18 3 views
0

Я использую ниже код на странице загрузки, но это дает мне ниже ошибкиКак захватить URL родительской страницы (параметры UTM) в IFrame странице,

«ссылка на объект не указывает на экземпляр объекта «.

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 

      if (("" + Request.QueryString["utm_source"] == "") && ("" + Request.QueryString["utm_medium"] == "") || ("" + Request.QueryString["utm_source"] == null) && ("" + Request.QueryString["utm_medium"] == null)) 
      { 
       lblSource.Text = "Direct/Referral"; 
      } 
      else 
      { 
       try 
       { 
        if (Request.UrlReferrer.OriginalString.ToString() != null) 
        { 
         string abc = Request.UrlReferrer.OriginalString.ToString(); 

         string[] source = abc.Split('?'); 
         string a1 = source[1]; 

         a1 = a1.Substring(11); 

         string[] spl = a1.Split('&'); 

         utm_source = spl[0]; 
         string a2 = spl[1]; 

         utm_medium = a2.Substring(11); 
        } 
       } 
       catch (Exception ex) 
       { 
        //Response.Write(ex); 
        lblSource.Text = "Direct/Referral"; 
       } 
      } 
      //Response.Write(utm_source + "   " + utm_medium); 

       lblSource.Text = utm_source + " " + utm_medium; 

     } 
    } 

ответ

3

Да, вы делаете это правильно, но вы должны поставить null проверки первых перед их использованием. Ниже приведены некоторые из кодов, которые можно улучшить.

Используйте это if(Request.UrlReferrer!=null && !string.IsNullOrEmpty(Request.UrlReferrer.OriginalString)) вместо if (Request.UrlReferrer.OriginalString.ToString() != null).

Используйте этот Request.QueryString["utm_source"] != null вместо Request.QueryString["utm_source"] == "", потому что, он будет пытаться преобразовывать его строку для сравнения и значение null, это будет ошибкой, как "Object reference not set to an instance of an object.".

Чтобы получить точную строку запроса, из iFrame вы можете сделать это, как это, вместо строковых манипуляций.

protected void Page_Load(object sender, EventArgs e) 
{ 
    Uri parenturl = new Uri(Request.UrlReferrer.OriginalString); 
    string qyr = parenturl.Query; 
    NameValueCollection col = HttpUtility.ParseQueryString(qyr); 
    String kvalue = col["k"]; 
    String mvalue = col["m"]; 
} 

Допущение: Приведенный выше код принадлежит test1.aspx и у меня есть еще одна страница, которая имеет test2.aspxiFrame с src = test1.aspx. Я использовал http://localhost:52785/test2.aspx?k=1&m=2 url, поэтому родительская страница имеет числовые запросы: k=1, m=2. Смотрите снимок экрана, что я получил.

enter image description here

+0

Уважаемый @Arindam, спасибо за решение, но он не работает, он дает мне ошибку «Ссылка на объект не установлена ​​в экземпляр объекта». – Abhi

+0

Можете ли вы рассказать мне, в какой строке он показывает ошибку? Или если вы можете отлаживать, тогда вы можете проверить. –

+1

Привет, Arindam, это была какая-то глупая ошибка, иначе ваш код очень полезен. СПАСИБО МНОГО. – Abhi

0

Вы можете попробовать следующий JavaScript, но только если IFrame и место вокруг происходят из того же домена (Same Origin Policy).

var uri = document.getElementById("IdOfIframe").contentWindow.location.href; 
+0

Эй Даниэль, Моя проблема сайта и IFrame оба находятся на разных серверах. :( – Abhi