2014-11-01 52 views
0

我有一个启用了引导程序的网站两个DivO DivOne和DivTwo。以编程方式显示基于IP国家的Div

如果国家是印度,我想要显示DivTwo。如果国家不是印度,我想展示DivOne。

我该如何在ASP.NET/HTML/JavaScript中实现这个功能?

这是我迄今为止在C#:

public string LocalIPAddress() 
{ 
    IPHostEntry host; 
    string localIP = ""; 
    host = Dns.GetHostEntry(Dns.GetHostName()); 
    foreach (IPAddress ip in host.AddressList) 
    { 
    if (ip.AddressFamily == AddressFamily.InterNetwork) 
    { 
     localIP = ip.ToString(); 
     break; 
    } 
    } 
    return localIP; 
} 

我也想要同样的代码在移动网站上运行。

一小部分。我宁愿选择一个采用IP地址并提供国家名称而不是在我的服务器上安装数据库的在线服务。谢谢!

+2

不能回答你的问题的整体,但在这里是为IP检查的几个服务: http://ipinfodb.com/ip_location_api.php http://www.geobytes.com/IpLocator.htm HTTP ://freegeoip.net/ http://www.hostip.info/use.html – HitMeWithYourBestShot 2014-11-01 01:03:09

+0

有免费的数据库可以加载,但如果您打算将它们称为服务,大多数服务似乎需要每月或每年免费。 – 2014-11-01 01:19:20

+0

我准备为一项服务付款。我想要即时访问,如果你知道任何。谢谢。 – CuriousDev 2014-11-01 01:27:29

回答

0

我给你一些提示,以解决您的问题,而不是给你:-)

首先你的函数LocalIPAddress()不返回公网IP的完整的解决方案,如果你连接通过路由器连接到互联网。尝试修改它以获取正确的IP。有很多方法可以做到这一点,但here's在SO的一个很好的讨论,让你有一个想法。

其次,有很多免费的网络服务,您可以根据您的外部IP获取国家详细信息。这是一个以JSON,XML或CSV格式返回国家详细信息的服务。

http://freegeoip.net/

然后,阅读此JSON(或者你喜欢的任何其它格式)信息,并了解国家名称。

现在,很容易根据国家名称显示您的首选DIV。这是你如何去做的。

你的标记应该是这样的。请注意,这些div具有属性runat="server"。这意味着你已经将这些HTML元素转换为一个服务器控件,以便你可以在你的代码中使用它们的ID来访问它们。

<div id="DivOne" visible="false" runat="server"> 
     <p>This is DIV 1</p> 
    </div> 

    <div id="DivTwo" visible="false" runat="server"> 
     <p>This is DIV 2</p> 
    </div> 

现在,在后面的代码做到这一点(我假设你已经根据上面的说明写的GetCountryName()

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      if (GetCountryName().ToLower() == "india") 
      { 
       DivTwo.Visible = true; 
      } 
      else 
      { 
       DivOne.Visible = true; 
      } 
     } 
    } 

希望这有助于。