0

我有一个 asp.net 站点,其中有两个需要相互通信的文件。下面是我的 footer.ascx 文件中的一段代码。我需要向 MobileAd.ascx.cs 文件发送一个字符串。以下是我每个文件中的相关代码。

我相信一切都设置正确我只是不知道如何正确传递值。未正确发送的值是 SendA.value

这是来自 footer.ascx 的片段

<%@ Register TagPrefix="PSG" TagName="MobileAd" Src="~/MobileAd.ascx" %>

<asp:HiddenField runat="server" ID="SendA" value="" />

<script>
if (/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent) ||
(/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.platform))) 
{
    document.getElementById('<%=SendA.ClientID%>').value = "mobile";
}   
else
{
    document.getElementById('<%=SendA.ClientID%>').value = "other";
}
</script>

<div class="bottom" align="center"> 
    <PSG:MobileAd ID="MobileAd" runat="server" AdType = <%=SendA.value%> />    
</div>

这是 MobileAd.ascx.cs 的接收端

private string _AdType;

public string AdType
{
    set
    {
        this._AdType = value;
    }
}

protected void Page_Load(object sender, EventArgs e)
{       
    string html = null;

    if (!string.IsNullOrEmpty(_AdType))
    {
        if (_AdType == "mobile")
        {
            html = "Mobile Ad Code";
        }
        else
        {
            html = "Tablet or Desktop Ad Code";
        }
        divHtml.InnerHtml = html;
    }
4

1 回答 1

0

您正在使用 javascript 检测用户代理。但是,作为服务器控件,MobileAd.ascx在 javascript 可以执行之前执行。您应该通过检查Request.UserAgent或在服务器端执行此操作Request.Browser.IsMobileDevice。如果该属性的唯一目的AdType是保留用户代理类型,您可以将其删除并尝试修改您的Page_Load方法,如下所示:

protected void Page_Load(object sender, EventArgs e)
{       
    string html = null;

    if (Request.Browser.IsMobileDevice)
    {
        html = "Mobile Ad Code";
    }
    else
    {
        html = "Tablet or Desktop Ad Code";
    }

    divHtml.InnerHtml = html;    
}
于 2013-06-12T03:13:47.803 回答