我在页面加载时使用下面的代码,但它给了我以下错误
"对象引用未设置为对象的实例。"
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;
}
}
答案 0 :(得分: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.aspx
,iFrame
src
= {{1} }。我使用了test1.aspx
个网址,因此父网页的查询字符串为http://localhost:52785/test2.aspx?k=1&m=2
。见下面的截图,我得到了什么。
答案 1 :(得分:0)
您可以尝试使用以下JavaScript,但前提是iframe和网站来自同一个域(相同的来源政策)。
var uri = document.getElementById("IdOfIframe").contentWindow.location.href;