European ASP.NET 4.5 Hosting BLOG

BLOG about ASP.NET 4, ASP.NET 4.5 Hosting and Its Technology - Dedicated to European Windows Hosting Customer

HostForLIFE.eu Proudly Launches Visual Studio 2017 Hosting

clock December 2, 2016 07:01 by author Peter

European leading web hosting provider, HostForLIFE.eu announces the launch of Visual Studio 2017 Hosting

HostForLIFE.eu was established to cater to an underserved market in the hosting industry; web hosting for customers who want excellent service. HostForLIFE.eu - a cheap, constant uptime, excellent customer service, quality, and also reliable hosting provider in advanced Windows and ASP.NET technology. HostForLIFE.eu proudly announces the availability of the Visual Studio 2017 hosting in their entire servers environment.

The smallest install is just a few hundred megabytes, yet still contains basic code editing support for more than twenty languages along with source code control. Most users will want to install more, and so customer can add one or more 'workloads' that represent common frameworks, languages and platforms - covering everything from .NET desktop development to data science with R, Python and F#.

System administrators can now create an offline layout of Visual Studio that contains all of the content needed to install the product without requiring Internet access. To do so, run the bootstrapper executable associated with the product customer want to make available offline using the --layout [path] switch (e.g. vs_enterprise.exe --layout c:\mylayout). This will download the packages required to install offline. Optionally, customer can specify a locale code for the product languages customer want included (e.g. --lang en-us). If not specified, support for all localized languages will be downloaded.

HostForLIFE.eu hosts its servers in top class data centers that is located in Amsterdam (NL), London (UK), Paris (FR), Frankfurt(DE) and Seattle (US) to guarantee 99.9% network uptime. All data center feature redundancies in network connectivity, power, HVAC, security, and fire suppression. All hosting plans from HostForLIFE.eu include 24×7 support and 30 days money back guarantee. The customers can start hosting their Visual Studio 2017 site on their environment from as just low €3.00/month only.

HostForLIFE.eu is a popular online ASP.NET based hosting service provider catering to those people who face such issues. The company has managed to build a strong client base in a very short period of time. It is known for offering ultra-fast, fully-managed and secured services in the competitive market.

HostForLIFE.eu offers the latest European Visual Studio 2017 hosting installation to all their new and existing customers. The customers can simply deploy their Visual Studio 2017 website via their world-class Control Panel or conventional FTP tool. HostForLIFE.eu is happy to be offering the most up to date Microsoft services and always had a great appreciation for the products that Microsoft offers.

Further information and the full range of features Visual Studio 2017 Hosting can be viewed here http://hostforlife.eu/European-Visual-Studio-2017-Hosting



ASP.NET Core 1.1 Hosting - HostForLIFE.eu :: How to Built-In Logging In .NET Core?

clock November 30, 2016 08:19 by author Peter

In this post, I will show you how to Built-In Logging In .NET Core. For an application, logging is very important to keep track of that application and keep it error-free.

In .NET Core, we don't need any third party logging; instead, we can use built-in logging whenever we want. This is very efficient in terms of code and performance. Now, develope a new .NET Core application and name it.

Step 1: Go to Package mManager View-->Other Windows--> Package manager Console  -->

Install-Package Microsoft.Extensions.Logging

Add Logging
Once  the extension's installed, we can add logging by adding ILogger<T> (custom logging) or ILoggerFactory. If we want to use ILoggerFactory, then we must create it using CreateLogger, to use logging add logging services under ConfigureServices. Moreover, we can use built-in logging with the other loggings (like Nlog) with very minimal code.
services.AddLogging(); 

Startup.cs
public class Startup 
    { 
        public Startup(IHostingEnvironment env) 
        { 
            var builder = new ConfigurationBuilder() 
                .SetBasePath(env.ContentRootPath) 
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) 
                .AddEnvironmentVariables(); 
            Configuration = builder.Build(); 
        } 
 
        public IConfigurationRoot Configuration { get; } 
 
        // This method gets called by the runtime. Use this method to add services to the container. 
        public void ConfigureServices(IServiceCollection services) 
        { 
            // Add framework services. 
            services.AddMvc(); 
            services.AddLogging(); 
        } 
 
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
        { 
            loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
            loggerFactory.AddDebug(); 
 
            if (env.IsDevelopment()) 
            { 
                app.UseDeveloperExceptionPage(); 
                app.UseBrowserLink(); 
            } 
            else 
            { 
                app.UseExceptionHandler("/Home/Error"); 
            } 
 
            app.UseStaticFiles(); 
 
            app.UseMvc(routes => 
            { 
                routes.MapRoute( 
                    name: "default", 
                    template: "{controller=Home}/{action=Index}/{id?}"); 
            }); 
        } 
    } 

ILoggerFactory: We can use  ILoggerFactory. For this, we must use CreateLogger.

_logger = Mylogger.CreateLogger(typeof(HomeController)); 

HomeController.cs
public class HomeController : Controller 
    { 
        private ILogger _logger; 
 
        public HomeController(ILoggerFactory Mylogger) 
        { 
            _logger = Mylogger.CreateLogger(typeof(HomeController)); 
        } 
 
        public IActionResult Index() 
        { 
            return View(); 
        } 
 
        public IActionResult About() 
        { 
            try 
            { 
                ViewData["Message"] = "Your application description page."; 
                _logger.LogInformation("About Page has been Accessed"); 
                return View(); 
            } 
            catch (System.Exception ex) 
            { 
                _logger.LogError("About: " + ex.Message); 
                throw; 
            } 
        } 
 
        public IActionResult Contact() 
        { 
            try 
            { 
                ViewData["Message"] = "Your contact page."; 
                _logger.LogInformation("Contact Page has been Accessed"); 
                return View(); 
            } 
            catch (System.Exception ex) 
            { 
                _logger.LogError("Contact: " + ex.Message); 
                throw; 
            } 
        } 
 
        public IActionResult Error() 
        { 
            return View(); 
        } 
    } 


Run and Test

LogLevel: We can add logging level by adding the level we want in appsettings.json.Trace

  • Debug
  • Information
  • Warning
  • Error
  • Application failure or crashes         


ASP.NET Core 1.1 Hosting - HostForLIFE.eu :: Uploading File Without PostBack In ASP.NET

clock November 9, 2016 08:55 by author Peter

In this post, you will learn how to upload a file without PostBack in ASP.NET. My main focus to write this blog is that, if you work with file upload control, the page requires full PostBack and if your file upload control is inside the update panel, you must specify your submit button in trigger, as shown below.

 <Triggers> 
    <asp:PostBackTrigger ControlID=""/> 
 </Triggers> 


This also causes the full PostBack problem. To remove this problem, use "Handler" in ASP. NET C#.

UploadFile.ashx Code

 using System; 
 using System.Web; 
 using System.IO; 
 using System.Web.SessionState; 
 public class UploadFile: IHttpHandler, IRequiresSessionState { 
     public void ProcessRequest(HttpContext context) { 
         string filedata = string.Empty; 
         if (context.Request.Files.Count > 0) { 
             HttpFileCollection files = context.Request.Files; 
             for (int i = 0; i < files.Count; i++) { 
                 HttpPostedFile file = files[i]; 
                 if (Path.GetExtension(file.FileName).ToLower() != ".jpg" && 
                     Path.GetExtension(file.FileName).ToLower() != ".png" && 
                     Path.GetExtension(file.FileName).ToLower() != ".gif" && 
                     Path.GetExtension(file.FileName).ToLower() != ".jpeg" && 
                     Path.GetExtension(file.FileName).ToLower() != ".pdf" 
                 ) { 
                     context.Response.ContentType = "text/plain"; 
                     context.Response.Write("Only jpg, png , gif, .jpeg, .pdf are allowed.!"); 
                     return; 
                 } 
                 decimal size = Math.Round(((decimal) file.ContentLength / (decimal) 1024), 2); 
                 if (size > 2048) { 
                     context.Response.ContentType = "text/plain"; 
                     context.Response.Write("File size should not exceed 2 MB.!"); 
                     return; 
                 } 
                 string fname; 
                 if (HttpContext.Current.Request.Browser.Browser.ToUpper() == "IE" || HttpContext.Current.Request.Browser.Browser.ToUpper() == "INTERNETEXPLORER") { 
                     string[] testfiles = file.FileName.Split(new char[] { 
                         '\\' 
                     }); 
                     fname = testfiles[testfiles.Length - 1]; 
                 } else { 
                     fname = file.FileName; 
                 } 
                 //here UploadFile is define my folder name , where files will be store. 
                 string uploaddir = System.Configuration.ConfigurationManager.AppSettings["UploadFile"]; 
                 filedata = Guid.NewGuid() + fname; 
                 fname = Path.Combine(context.Server.MapPath("~/" + uploaddir + "/"), filedata); 
                 file.SaveAs(fname); 
             } 
         } 
         context.Response.ContentType = "text/plain"; 
         context.Response.Write("File Uploaded Successfully:" + filedata + "!"); 
         //if you want to use file path in aspx.cs page , then assign it in to session 
         context.Session["PathImage"] = filedata; 
     } 
     public bool IsReusable { 
         get { 
             return false; 
         } 
     } 
 } 


web.config code

 <?xml version="1.0"?> 
 <!-- 
 For more information on how to configure your ASP.NET application, please visit 
 http://go.microsoft.com/fwlink/?LinkId=169433 
 --> 
 <configuration> 
     <system.web> 
         <compilation debug="true" targetFramework="4.0" /> 
     </system.web> 
     <appSettings> 
         <add key="Upload" value="UploadFile" /> 
     </appSettings> 
 </configuration> 


Default.aspx code

 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 
     <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
     <html xmlns="http://www.w3.org/1999/xhtml"> 
  
     <head runat="server"> 
         <title></title> 
         <%-- Should have internet connection for loading this file other wise inherit own js file for supporting js library--%> 
             <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
             <script type="text/javascript"> 
                 function onupload() { 
                     $(function() { 
                         var fileUpload = $('#<%=FileUpload.ClientID%>').get(0); 
                         var files = fileUpload.files; 
                         var test = new FormData(); 
                         for (var i = 0; i < files.length; i++) { 
                             test.append(files[i].name, files[i]); 
                         } 
                         $.ajax({ 
                             url: "UploadFile.ashx", 
                             type: "POST", 
                             contentType: false, 
                             processData: false, 
                             data: test, 
                             success: function(result) { 
                                 if (result.split(':')[0] = "File Uploaded Successfully") { 
                                     document.getElementById("<%=lbl_smsg.ClientID%>").innerText = result.split(':')[0]; 
                                 } else { 
                                     document.getElementById("<%=lbl_emsg.ClientID%>").innerText = result; 
                                 } 
                             }, 
                             error: function(err) { 
                                 alert(err.statusText); 
                             } 
                         }); 
                     }) 
                 } 
             </script> 
     </head> 
  
     <body> 
         <form id="form1" runat="server"> 
             <asp:ScriptManager ID="scmain" runat="server"></asp:ScriptManager> 
             <asp:UpdatePanel ID="upmain" runat="server"> 
                 <ContentTemplate> 
                     <fieldset> 
                         <legend>Upload File WithOut PostBack inside Update Panel</legend> 
                         <asp:FileUpload ID="FileUpload" runat="server" /> 
                         <input type="button" id="btnUpload" value="Upload Files" onclick="onupload();" /> 
                         <asp:Label ID="lbl_emsg" runat="server" ForeColor="Red"></asp:Label> 
                         <asp:Label ID="lbl_smsg" runat="server" ForeColor="Green"></asp:Label> 
                     </fieldset> 
                 </ContentTemplate> 
             </asp:UpdatePanel> 
         </form> 
     </body> 
  
     </html> 


Default.aspx code.cs code

 using System; 
 using System.Collections.Generic; 
 using System.Linq; 
 using System.Web; 
 using System.Web.UI; 
 using System.Web.UI.WebControls; 
 public partial class _Default: System.Web.UI.Page 
 { 
     protected void Page_Load(object sender, EventArgs e) {} 
 } 

HostForLIFE.eu ASP.NET Core 1.1 Hosting

European best, cheap and reliable ASP.NET hosting with instant activation. HostForLIFE.eu is #1 Recommended Windows and ASP.NET hosting in European Continent. With 99.99% Uptime Guaranteed of Relibility, Stability and Performace. HostForLIFE.eu security team is constantly monitoring the entire network for unusual behaviour. We deliver hosting solution including Shared hosting, Cloud hosting, Reseller hosting, Dedicated Servers, and IT as Service for companies of all size.



ASP.NET Core 1.0 Hosting - HostForLIFE.eu :: How to Read a Remote WEB Page in ASP.NET C#?

clock October 26, 2016 09:15 by author Peter

In this tutorial, let me show you how to Read a Remote WEB Page in ASP.NET C#. Below is my aspx:

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server"> 
        <title></title> 
    </head> 
    <body> 
        <form id="form1" runat="server"> 
        <div> 
            <asp:Label ID="lblResponse" runat="server"></asp:Label></div> 
        </form> 
    </body> 
    </html> 

Now my aspx.cs is:

    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 
    using System.Web.UI; 
    using System.Web.UI.WebControls; 
    using System.Net; 
    using System.IO; 
     
    public partial class _Default : System.Web.UI.Page 
    { 
        protected void Page_Load(object sender, EventArgs e) 
        { 
            string URLResponse = GetHtmlPage("http://www.google.com"); 
            lblResponse.Text = URLResponse; 
        } 
     
        static string GetHtmlPage(string strURL) 
        { 
     
            String strResult; 
            WebResponse objResponse; 
            WebRequest objRequest = HttpWebRequest.Create(strURL); 
            objResponse = objRequest.GetResponse(); 
            using (StreamReader sr = new StreamReader(objResponse.GetResponseStream())) 
            { 
                strResult = sr.ReadToEnd(); 
                sr.Close(); 
            } 
            return strResult; 
        } 
    } 


Here I am reading http://www.google.com and showing response in a label:

 


HostForLIFE.eu ASP.NET Core 1.0 Hosting

European best, cheap and reliable ASP.NET hosting with instant activation. HostForLIFE.eu is #1 Recommended Windows and ASP.NET hosting in European Continent. With 99.99% Uptime Guaranteed of Relibility, Stability and Performace. HostForLIFE.eu security team is constantly monitoring the entire network for unusual behaviour. We deliver hosting solution including Shared hosting, Cloud hosting, Reseller hosting, Dedicated Servers, and IT as Service for companies of all size.



ASP.NET Core 1.0 Hosting - HostForLIFE.eu :: Showing Team Member With Its Team In Gridview Using ASP.NET

clock October 6, 2016 21:38 by author Peter

In this post, i will tell you about Showing Team Member With Its Team In Gridview Using ASP.NET. This following code snippet is for to show team member with its team in Gridview using ASP.NET:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowDataBound="GridView1_RowDataBound" BackColor="White" BorderColor="#CC9966" BorderStyle="None" BorderWidth="1px" CellPadding="4"> 
    <FooterStyle BackColor="#FFFFCC" ForeColor="#330099" /> 
    <HeaderStyle BackColor="#990000" Font-Bold="true" ForeColor="#FFFFCC" /> 
    <AlternatingRowStyle BackColor="#DFDFD0" /> 
    <Columns> 
        <asp:BoundField DataField="Teamname" HeaderText="Teamname" /> 
        <asp:TemplateField HeaderText="Agentname"> 
            <ItemTemplate> 
                <asp:DropDownList ID="ddlagent" runat="server" Width="250px" /> </ItemTemplate> 
        </asp:TemplateField> 
        <asp:TemplateField HeaderText="CountAgent"> 
            <ItemTemplate> 
                <asp:Label ID="lblAgent" runat="server" Width="100px" /> </ItemTemplate> 
        </asp:TemplateField> 
    </Columns> 
    <PagerStyle BackColor="#FFFFCC" ForeColor="#330099" HorizontalAlign="Center" /> 
    <RowStyle BackColor="White" ForeColor="#330099" /> 
    <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="#663399" /> 
    <SortedAscendingCellStyle BackColor="#FEFCEB" /> 
    <SortedAscendingHeaderStyle BackColor="#AF0101" /> 
    <SortedDescendingCellStyle BackColor="#F6F0C0" /> 
    <SortedDescendingHeaderStyle BackColor="#7E0000" />  
</asp:GridView> 

Code

using System.Data; 
using System.Data.SqlClient; 
using System.Configuration; 
public partial class Default2: System.Web.UI.Page { 
    string ConnStr = ConfigurationManager.ConnectionStrings["CRMConnectionString"].ToString(); 
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["CRMConnectionString"].ToString()); 
    DataSet someDataSet = new DataSet(); 
    SqlDataAdapter adapt = new SqlDataAdapter(); 
    protected void Page_Load(object sender, EventArgs e) { 
        TopTeam(); 
    } 
    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { 
        if (e.Row.RowType == DataControlRowType.DataRow) { 
            con.Open(); 
            var ddl = (DropDownList) e.Row.FindControl("ddlagent"); 
            var Agent = (Label) e.Row.FindControl("lblAgent"); 
            string TeamName = e.Row.Cells[0].Text.ToString(); 
            SqlCommand cmd = new SqlCommand("SELECT distinct (Agentname +' , ' + Hr_id) as [Agentname] FROM CRM_Agentname " + " WHERE TeamName = '" + TeamName + "' and status='Active'", con); 
            SqlDataAdapter da = new SqlDataAdapter(cmd); 
            DataSet ds = new DataSet(); 
            da.Fill(ds); 
            con.Close(); 
            ddl.DataSource = ds; 
            ddl.DataTextField = "Agentname"; 
            ddl.DataValueField = "Agentname"; 
            ddl.DataBind(); 
            int totalItems = ddl.Items.Count; 
            Agent.Text = totalItems.ToString(); 
        } 
    } 
    private void TopTeam() { 
        con.Open(); 
        SqlCommand cmd = new SqlCommand("SELECT DISTINCT TeamName FROM CRM_Teamname where status='ACtive' and process like 'r%' and teamname!='---- Select ----'", con); 
        SqlDataAdapter da = new SqlDataAdapter(cmd); 
        DataSet ds = new DataSet(); 
        da.Fill(ds); 
        con.Close(); 
        GridView1.DataSource = ds; 
        GridView1.DataBind(); 
        con.Close(); 
    } 
}

HostForLIFE.eu ASP.NET Core 1.0 Hosting

European best, cheap and reliable ASP.NET hosting with instant activation. HostForLIFE.eu is #1 Recommended Windows and ASP.NET hosting in European Continent. With 99.99% Uptime Guaranteed of Relibility, Stability and Performace. HostForLIFE.eu security team is constantly monitoring the entire network for unusual behaviour. We deliver hosting solution including Shared hosting, Cloud hosting, Reseller hosting, Dedicated Servers, and IT as Service for companies of all size.



ASP.NET Core 1.0 Hosting - HostForLIFE.eu :: How to Get DropDownList , Value, Index and Text in ASP.NET using JavaScript?

clock September 29, 2016 21:02 by author Peter

In this code snippet, we learn how to get selected value, selected index and selected of asp dropdownlist in JavaScript. First, Create new web application in visual studio.
Now, Add one webform to application. In this tutorial we added WebForm1 in application. And Then Add on DropDownList control to webform. Design webform as follows:

<%@ Page Language="C#" AutoEventWireup="true"CodeBehind="WebForm1.aspx.cs" Inherits="DropDownListJS.WebForm1" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<title></title> 
<script type="text/javascript"> 
function GetListDetails() { 
    var param = document.getElementById('ddlColors'); 
    document.getElementById('lblText').innerHTML = param.options[param.selectedIndex].text; 
    document.getElementById('lblValue').innerHTML = param.options[param.selectedIndex].value; 
    document.getElementById('lblIndex').innerHTML = param.options[param.selectedIndex].index; 

</script> 
</head> 
<body> 
<form id="form1" runat="server"> 
<div> 
    <table> 
        <tr> 
            <td> 
                Colors 
            </td> 
            <td> 
                <asp:DropDownList ID="ddlColors" runat="server" onchange="GetListDetails()"> 
                    <asp:ListItem Text="Select" Value="0" /> 
                    <asp:ListItem Text="Red" Value="11" /> 
                    <asp:ListItem Text="Green" Value="22" /> 
                    <asp:ListItem Text="Blue" Value="33" /> 
                </asp:DropDownList> 
            </td> 
        </tr> 
        <tr> 
            <td> 
                Selecte Index :
            </td> 
            <td> 
                <label id="lblIndex">
                </label> 
            </td> 
        </tr> 
        <tr> 
            <td> 
                Selecte Text : 
            </td> 
            <td> 
                <label id="lblText"> 
                </label> 
            </td> 
        </tr> 
        <tr> 
            <td> 
                Selecte Value : 
            </td> 
           <td> 
                <label id="lblValue"> 
                </label> 
            </td> 
        </tr> 
    </table> 
</div>
</form> 
</body> 
</html> 


Next step, Run application.

Finally, Change the color.

HostForLIFE.eu ASP.NET Core 1.0 Hosting

European best, cheap and reliable ASP.NET hosting with instant activation. HostForLIFE.eu is #1 Recommended Windows and ASP.NET hosting in European Continent. With 99.99% Uptime Guaranteed of Relibility, Stability and Performace. HostForLIFE.eu security team is constantly monitoring the entire network for unusual behaviour. We deliver hosting solution including Shared hosting, Cloud hosting, Reseller hosting, Dedicated Servers, and IT as Service for companies of all size.



ASP.NET Core 1.0 Hosting - HostForLIFE.eu :: How to Handling JSON Arrays Returned From ASP.NET Web Services With jQuery?

clock September 20, 2016 20:35 by author Peter

In this post, I will tell you about how to handling JSON Arrays returned from ASP.NET Web Services with jQuery.  JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate. It is based on a subset of the JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999. JSON is a text format that is completely language independent but uses conventions that are familiar to programmers of the C-family of languages, including C, C++, C#, Java, JavaScript, Perl, Python, and many others. These properties make JSON an ideal data-interchange language.

using System; 
using System.Collections.Generic; 
using System.Configuration; 
using System.Data; 
using System.Linq; 
using System.Text; 
using System.Text.RegularExpressions; 
using System.Web; 
using System.Web.Script.Serialization; 
using System.Web.Script.Services; 
using System.Web.Services; 
namespace VIS { 
[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
[System.ComponentModel.ToolboxItem(false)] 
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
[System.Web.Script.Services.ScriptService] 
public class WebMyService: System.Web.Services.WebService { 
    string connetionString = null; 
    SqlConnection sqlCnn; 
    SqlCommand sqlCmd; 
    SqlDataAdapter adapter = new SqlDataAdapter(); 
    DataSet dsbind = new DataSet(); 
    int i = 0; 
    string sql = null; 
    public class Gender { 
        public string employeeid { 
            get; 
            set; 
        } 
        public string male { 
            get; 
            set; 
        } 
        public string female { 
            get; 
            set; 
        } 
    } 
    public string JSONConversion(DataTable dt) { 
            DataSet ds = new DataSet(); 
            ds.Merge(dt); 
            StringBuilder JsonString = new StringBuilder(); 
            JsonString.Append("{"); 
            JsonString.Append("\"Data\""); 
            JsonString.Append(":"); 
            if (ds != null && ds.Tables[0].Rows.Count > 0) { 
                JsonString.Append("["); 
                for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { 
                    JsonString.Append("{"); 
                    for (int j = 0; j < ds.Tables[0].Columns.Count; j++) { 
                        if (j < ds.Tables[0].Columns.Count - 1) { 
                            JsonString.Append("\"" + ds.Tables[0].Columns[j].ColumnName.ToString() + "\":" + "\"" + ds.Tables[0].Rows[i][j].ToString() + "\","); 
                        } else if (j == ds.Tables[0].Columns.Count - 1) { 
                            JsonString.Append("\"" + ds.Tables[0].Columns[j].ColumnName.ToString() + "\":" + "\"" + ds.Tables[0].Rows[i][j].ToString() + "\""); 
                        } 
                    } 
                    if (i == ds.Tables[0].Rows.Count - 1) { 
                        JsonString.Append("}"); 
                    } else { 
                        JsonString.Append("},"); 
                    } 
                } 
                JsonString.Append("]"); 
                JsonString.Append("}"); 
                return JsonString.ToString(); 
            } else { 
                return null; 
            } 
        } 
        [WebMethod] 
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
    public Gender[] GenderWise() { 
        connetionString = "Data Source=ServerName;Initial Catalog=DatabaseName;User ID=UserName;Password=Password"; 
        sql = "select distinct(empid) as employeeid, count(case when gender='M' then 1 end) as Male, count(case when gender='F' then 1 end) as Female from V_CountOnGender"; 
        sqlCnn = new SqlConnection(connetionString); 
        try { 
            sqlCnn.Open(); 
            sqlCmd = new SqlCommand(sql, sqlCnn); 
            adapter.SelectCommand = sqlCmd; 
            adapter.Fill(dsbind); 
            JavaScriptSerializer obj = new JavaScriptSerializer(); 
            string result = string.Empty; 
            Gender[] arrlst = new Gender[dsbind.Tables[0].Rows.Count]; 
            if (dsbind.Tables[0].Rows.Count > 0) { 
                for (int i = 0; i < dsbind.Tables[0].Rows.Count; i++) { 
                    Gender objgender = new Gender(); 
                    objgender.employeeid = dsbind.Tables[0].Rows[i]["employeeid"].ToString(); 
                    objgender.male = dsbind.Tables[0].Rows[i]["Male"].ToString(); 
                    objgender.female = dsbind.Tables[0].Rows[i]["Female"].ToString(); 
                    arrlst.SetValue(objgender, i); 
                } 
            } else { 
                result = "No Record Found"; 
            } 
        } catch (Exception ex) {} 
        return arrlst;; 
    } 


This will go into the < head > section of the page: 

script type = "text/javascript" 
src = "script/jquery-1.2.6.min.js" > < /script> < 
script type = "text/javascript" > 
$(document).ready(function() { 
    $.ajax({ 
        type: "POST", 
        contentType: "application/json; charset=utf-8", 
        dataType: "json", 
        url: "/WebMyVoterService.asmx/GenderWise", 
        processData: false, 
        success: OnSuccess, 
        failure: function(response) { 
            alert("Can't be able to bind graph"); 
        }, 
        error: function(response) { 
            alert("Can't be able to bind graph"); 
        } 
    }); 

    function OnSuccess(response) { 
        var dpmale = []; 
        var dpfemale = []; 
        for (var i = 0; i < response.d.length; i++) { 
            var obj = response.d[i]; 
            var datamale = { 
                y: parseInt(obj.male), 
                label: obj.employeeid, 
            }; 
            var datafemale = { 
                y: parseInt(obj.female), 
                label: obj.employeeid, 
            }; 
            dpmale.push(datamale); 
            dpfemale.push(datafemale); 
        } 
        var chart = new CanvasJS.Chart("chartContainerbar", { 
            animationEnabled: true, 
            axisX: { 
                interval: 1, 
                labelFontSize: 10, 
                lineThickness: 0, 
            }, 
            axisY2: { 
                valueFormatString: "0", 
                lineThickness: 0, 
                labelFontSize: 10, 
            }, 
            toolTip: { 
                shared: true 
            }, 
            legend: { 
                verticalAlign: "top", 
                horizontalAlign: "center", 
                fontSize: 10, 
            }, 
            data: [{ 
                type: "stackedBar", 
                showInLegend: true, 
                name: "Male", 
                axisYType: "secondary", 
                color: "#f8d347", 
                dataPoints: dpmale 
            }, { 
                type: "stackedBar", 
                showInLegend: true, 
                name: "Female", 
                axisYType: "secondary", 
                color: "#6ccac9", 
                dataPoints: dpfemale 
            }] 
        }); 
        chart.render(); 
    } 
}); < /script> 

HostForLIFE.eu ASP.NET Core 1.0 Hosting

European best, cheap and reliable ASP.NET hosting with instant activation. HostForLIFE.eu is #1 Recommended Windows and ASP.NET hosting in European Continent. With 99.99% Uptime Guaranteed of Relibility, Stability and Performace. HostForLIFE.eu security team is constantly monitoring the entire network for unusual behaviour. We deliver hosting solution including Shared hosting, Cloud hosting, Reseller hosting, Dedicated Servers, and IT as Service for companies of all size.



ASP.NET Core 1.0 Hosting - HostForLIFE.eu :: Command Event On Buttons > Click Event On Button

clock September 13, 2016 21:14 by author Peter

Using Command event over Click events give us better control over Coding as it provide proper manageable way to control events in a single module.

If we tend to had 5-6 button the rather than using 5-6 button click events we can use "Command" event. Multiple buttons will have same Command Event function but Multiple buttons cannot have same Click button event. each Click and Command Button are often related to a single button but always Click event will be fired firstly. "CommandName" property of each button must also be specified for each button.This property will decide
"what to do" in Command function this is common for multiple buttons.

Using Command event over Click events provide us better control over coding as it provide proper manageable way to control events in a single module.

Note:
"CommandName" property is important and required of buttons if we are using "Command" event. we can rename the Command Event function's name.

Follow this pattern,
    protected void Button_Command(object sender, CommandEventArgs e) 
    { 
        switch (e.CommandName) { 
            case "button1": 
                Response.Write("Click from 1"); 
                break; 
            case "button2": 
                Response.Write("Click from 2"); 
                break; 
            case "button3": 
                Response.Write("Click from 3"); 
                break; 
        } 
    }  


and in aspx file,
    <asp:Button ID="Button1" runat="server" Text="Button1" CommandName="button1" OnCommand="Button_Command" /> 
    <asp:Button ID="Button2" runat="server" Text="Button2" CommandName="button2" OnCommand="Button_Command" /> 
    <asp:Button ID="Button3" runat="server" Text="Button3" CommandName="button3" OnCommand="Button_Command" /> 
 

HostForLIFE.eu ASP.NET Core 1.0 Hosting

European best, cheap and reliable ASP.NET hosting with instant activation. HostForLIFE.eu is #1 Recommended Windows and ASP.NET hosting in European Continent. With 99.99% Uptime Guaranteed of Relibility, Stability and Performace. HostForLIFE.eu security team is constantly monitoring the entire network for unusual behaviour. We deliver hosting solution including Shared hosting, Cloud hosting, Reseller hosting, Dedicated Servers, and IT as Service for companies of all size.



ASP.NET Core 1.0 Hosting - HostForLIFE.eu :: How to Post Multiple JSON Objects to Ajax Method in C#?

clock September 8, 2016 20:57 by author Peter

Today, I will show you How to Post Multiple JSON Objects to Ajax Method in C#.

C# web method
[System.Web.Services.WebMethod] 
public static void Post(object data, object dt) 

    List < Category > lstItems = new JavaScriptSerializer().ConvertToType < List < Category >> (data); 
    List < Product > lstprditems = new JavaScriptSerializer().ConvertToType < List < Product >> (dt); 
    string ctid = ""; 
    string ctnme = ""; 
    string pdid = ""; 
    string pdnme = ""; 
    for (int i = 0; i < lstItems.Count; i++) 
    { 
        ctid = ctid + "," + lstItems[i].categoryID; 
        ctnme = ctnme + "," + lstItems[i].categoryName; 
    } 
    for (int i = 0; i < lstprditems.Count; i++) 
    { 
        pdid = pdid + "," + lstprditems[i].productID; 
        pdnme = pdnme + "," + lstprditems[i].productName; 
    } 
    if (ctid.Length > 0) 
    { 
        ctid = ctid.Remove(0, 1); 
        ctnme = ctnme.Remove(0, 1); 
    } 
    if (ctid.Length > 0) 
    { 
        pdid = pdid.Remove(0, 1); 
        pdnme = pdnme.Remove(0, 1); 
    } 


Code
<html xmlns="http://www.w3.org/1999/xhtml"> 
 
<head runat="server"> 
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script> 
 
    <script type="text/javascript"> 
        function PassJavascriptObject() 
        { 
            var Ct = []; 
            var Pd = []; 
            var categoryModel = { 
                categoryID: 1, 
                categoryName: "Beverage" 
            }; 
            Ct.push(categoryModel); 
            var categoryModel1 = { 
                categoryID: 2, 
                categoryName: "Liuwu" 
            }; 
            Ct.push(categoryModel1); 
            var productModel = { 
                productID: 1, 
                productName: "Chai" 
            }; 
            Pd.push(productModel) 
            var productModel2 = { 
                productID: 2, 
                productName: "teccc" 
            }; 
            Pd.push(productModel2) 
            $.ajax( 
            { 
                url: 'WebForm1.aspx/Post', 
                type: 'post', 
                dataType: 'json', 
                // It is important to set the content type 
                // request header to application/json because 
                // that's how the client will send the request 
                contentType: 'application/json', 
                data: JSON.stringify( 
                { 
                    data: Ct, 
                    dt: Pd 
                }), 
                cache: false, 
                success: function(result) 
                { 
                    alert(result); 
                }, 
                error: function(xhr, ajaxOptions, thrownError) 
                { 
                    alert(thrownError); 
                } 
            }); 
        } 
    </script> 
 
</head> 
 
<body> 
    <form id="form1" runat="server"> 
        <div> 
            <span onclick="javascript:PassJavascriptObject();">Call Method</span> 
        </div> 
    </form> 
</body> 
 
</html>

HostForLIFE.eu ASP.NET Core 1.0 Hosting

European best, cheap and reliable ASP.NET hosting with instant activation. HostForLIFE.eu is #1 Recommended Windows and ASP.NET hosting in European Continent. With 99.99% Uptime Guaranteed of Relibility, Stability and Performace. HostForLIFE.eu security team is constantly monitoring the entire network for unusual behaviour. We deliver hosting solution including Shared hosting, Cloud hosting, Reseller hosting, Dedicated Servers, and IT as Service for companies of all size.



ASP.NET Core 1.0 Hosting - HostForLIFE.eu :: How to Authorized.Net And PayPal Express Gateway?

clock September 1, 2016 23:27 by author Peter

In this tutorial, I will show you how to Authorized.Net and PayPal Express Gateway. Now write the following code:

Default.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div align="center"> 
      <table style="border: 1px solid black; vertical-align: middle;" id="table3">       
        <tr><td colspan="2" align="center"> 
            <asp:ValidationSummary ID="ValidationSummary1" ShowSummary="false" ShowMessageBox="true" ValidationGroup="fldGrp1" runat="server" /> 
        </td></tr> 
        <tr> 
            <td align="right"> 
                <asp:RequiredFieldValidator ID="RequiredFieldValidator1" ControlToValidate="ddlPaymentMethod" InitialValue="SELECT" ValidationGroup="fldGrp1" runat="server" ErrorMessage="Method is required"> * </asp:RequiredFieldValidator>Method:</td> 
            <td align="left"><asp:DropDownList ID="ddlPaymentMethod" onselectedindexchanged="ddlPyamentMethod_SelectedIndexChanged" AutoPostBack="true" runat="server"> 
                <asp:ListItem>SELECT</asp:ListItem> 
                <asp:ListItem>American Express</asp:ListItem> 
                <asp:ListItem>Discover</asp:ListItem> 
                <asp:ListItem>Master</asp:ListItem> 
                <asp:ListItem>Visa</asp:ListItem> 
                <asp:ListItem>Paypal</asp:ListItem> 
            </asp:DropDownList></td> 
        </tr> 
        <tr> 
            <td align="right"> 
                <asp:RequiredFieldValidator ID="RequiredFieldValidator2" ControlToValidate="txtNameOnCard" ValidationGroup="fldGrp1" runat="server" ErrorMessage="Name on card is required"> * </asp:RequiredFieldValidator>Name of the card:</td> 
            <td align="left"><asp:TextBox ID="txtNameOnCard" Width="250px" runat="server"></asp:TextBox></td> 
        </tr> 
        <tr> 
            <td align="right"> 
                <asp:RequiredFieldValidator ID="RequiredFieldValidator3" ControlToValidate="txtCreditCardNumber" ValidationGroup="fldGrp1" runat="server" ErrorMessage="Credit card number is required"> * </asp:RequiredFieldValidator>Credit card number:</td> 
            <td align="left"><asp:TextBox ID="txtCreditCardNumber" Width="250px" MaxLength="20" runat="server"></asp:TextBox></td> 
        </tr> 
        <tr> 
            <td align="right"><asp:RequiredFieldValidator ID="RequiredFieldValidator4" ControlToValidate="ddlExpMonth" InitialValue="0" ValidationGroup="fldGrp1" runat="server" ErrorMessage="Expiration month is required"> * </asp:RequiredFieldValidator>Expiration month:</td> 
            <td align="left"> 
                <asp:DropDownList ID="ddlExpMonth" runat="server"> 
                    <asp:ListItem Value="0">SELECT</asp:ListItem> 
                    <asp:ListItem Value="1">January</asp:ListItem> 
                    <asp:ListItem Value="2">February</asp:ListItem> 
                    <asp:ListItem Value="3">March</asp:ListItem> 
                    <asp:ListItem Value="4">April</asp:ListItem> 
                    <asp:ListItem Value="5">May</asp:ListItem> 
                    <asp:ListItem Value="6">June</asp:ListItem> 
                    <asp:ListItem Value="7">July</asp:ListItem> 
                    <asp:ListItem Value="8">August</asp:ListItem> 
                    <asp:ListItem Value="9">September</asp:ListItem> 
                    <asp:ListItem Value="10">October</asp:ListItem> 
                    <asp:ListItem Value="11">November</asp:ListItem> 
                    <asp:ListItem Value="12">December</asp:ListItem> 
                </asp:DropDownList> /<asp:RequiredFieldValidator ID="RequiredFieldValidator5" ControlToValidate="ddlExpYear" InitialValue="0" ValidationGroup="fldGrp1" runat="server" ErrorMessage="Expiration year is required"> * </asp:RequiredFieldValidator> 
                <asp:DropDownList ID="ddlExpYear" runat="server"></asp:DropDownList> 
            </td> 
        </tr> 
        <tr> 
            <td align="right"> 
                <asp:RequiredFieldValidator ID="RequiredFieldValidator6" ControlToValidate="txtSecurityCode" ValidationGroup="fldGrp1" runat="server" ErrorMessage="Security code is required"> * </asp:RequiredFieldValidator>Security Code:</td> 
            <td align="left"><asp:TextBox ID="txtSecurityCode" Width="60px" MaxLength="5" runat="server"></asp:TextBox></td> 
        </tr> 
        <tr><td colspan="2" align="center"><asp:Label ID="lblGatewayMessage" Font-Bold="true" runat="server"></asp:Label></td></tr> 
        <tr><td colspan="2" align="center"> 
                 <asp:Button ID="btnChargeCard" Text="Pay-Now" OnClick="AuthorizedDotNet_Collect" ValidationGroup="fldGrp1" runat="server" />                  
        </td></tr> 
        <tr><td colspan="2" align="center"> </td></tr> 
      </table> 
    </div> 
    </form> 
</body> 
</html> 

Default.aspx.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using ncMerchantGateway; 
 
public partial class _Default : System.Web.UI.Page 

    protected void Page_Load(object sender, EventArgs e) 
    { 
        if (!Page.IsPostBack) 
        { 
            //- Let's do 10 years of credit card expiration year. 
            this.ddlExpYear.Items.Clear(); 
            this.ddlExpYear.Items.Add(new ListItem("SELECT", "0")); 
            for (int i = 0; i <= 10; i++) 
            { 
                if (i > 0) 
                { 
                    this.ddlExpYear.Items.Add(new ListItem(DateTime.Now.AddYears(i).Year.ToString(), i.ToString())); 
                } 
            } 
        } 
    } 
    protected void ddlPyamentMethod_SelectedIndexChanged(object sender, EventArgs e) 
    { 
        if (ddlPaymentMethod.Text.Trim().ToUpper() == "PAYPAL") 
        {    
            PayPalExpress_Collect(sender, e); 
        }         
    }     
    //--------------------------------------------------------------------------------- 
    //- Warning: a merchant account from authorized.net is required. 
    //--------------------------------------------------------------------------------- 
    protected void AuthorizedDotNet_Collect(object sender, EventArgs e) 
    {    
        //- Entantiate the class here 
        oAuthorizedotnet oGateway = new oAuthorizedotnet(); 
 
        //- very important information must be entered here 
        oGateway.MerchantAccount_Version = "3.1"; // Authorized.net api version. 
        oGateway.AccountHolder_LoginId = "valid login id goes here"; 
        oGateway.AccountHolder_TransactionKey = "valid merchant transaction key goes here"; 
        oGateway.AccountHolder_EMail = "merchart email registered with authorized.net goes here"; 
        oGateway.CompanyCollectorName = "ABC, Inc."; //- Merchant Company name goes here 
        oGateway.AuthorizeChargesOnly = true; // Authorized Only (False = {Authorized and Capture}) 
        oGateway.Country = "USA"; 
        oGateway.Currency = "USD"; 
        oGateway.IsTestMode_Environment = false; //- Live  
 
        //- Amount to be charged 
        double dblCharges = 50.00; 
        //- Sales Tax if there is any based on NYC sales tax. 
        double dblSalesTax = (50.00 * 0.09); 
        //- Total to Collect 
        double dblTotalCharges = dblCharges + dblSalesTax; 
 
        List<string> lstCCPaymentData = new List<string>(); 
        //- Please follow this order 0 throught 12 
        lstCCPaymentData.Add("Jane"); //-Billing First-Name 
        lstCCPaymentData.Add("Doe"); //-Billing Last-Name 
        lstCCPaymentData.Add("123 Apple Road"); //-Billing Address 
        lstCCPaymentData.Add("New York"); //-Billing City 
        lstCCPaymentData.Add("NY"); //-Billing State 
        lstCCPaymentData.Add("10040"); //-Billing Zipcode 
        lstCCPaymentData.Add("212-555-5555"); //-Billing Telephone 
        lstCCPaymentData.Add("[email protected]"); //-shipping email //-7 
         
        //- Credit card info. exactly in this order. 
        lstCCPaymentData.Add(this.txtCreditCardNumber.Text); //-Credit Card number 
        lstCCPaymentData.Add(this.ddlExpMonth.Text); //- Credit card expiration month 
        lstCCPaymentData.Add(this.ddlExpYear.Text); //-Credit card expiration year 
        lstCCPaymentData.Add(this.txtSecurityCode.Text); //-Credit card security code 
        lstCCPaymentData.Add(dblTotalCharges.ToString()); //-Total Amount to be either authorized or capture 
 
        //- Connect with Authorize.net gateway now. 
        oGateway.AuthorizeCaptureCharges(lstCCPaymentData); 
 
        //- Return Message.(Display any error message returned from the Authorized.net gateway here) 
        this.lblGatewayMessage.Text = oGateway.GatewayReturnedMessage.Trim(); 
    } 
    //--------------------------------------------------------------------------------- 
    //- Warning: you must have a paypal account with valid email registered. 
    //--------------------------------------------------------------------------------- 
    protected void PayPalExpress_Collect(object sender, EventArgs e) 
    { 
         
        //- Entantiate the class here 
        oPayPalExpress oGateway = new oPayPalExpress(); 
 
        //- very important information must be entered here 
        oGateway.ECommerce_SiteEMail = "[email protected]"; 
        oGateway.ECommerce_SiteUrl = "www.johndoe.com"; 
        oGateway.Country_Code = "US"; 
        oGateway.Currency_Code = "USD"; 
        oGateway.CancelledTransaction_Url = "http://www.johndoe.com/CancelledTransaction.html"; 
        oGateway.ReturnToECommerce_SiteUrl = "http://www.johndoe.com/Thankyou.html"; 
 
        //- Amount to be charged 
        double dblCharges = 50.00; 
        //- Pay Pal Fee if there is any [Warning: you must let the user know about this fee charges.] 
        double dblProcessingFee = (dblCharges * 2.75) / 100;        
        //- Sales Tax if there is any based on NYC sales tax. 
        double dblSalesTax = (50.00 * 0.09); 
        //- Total to Collect 
        double dblTotalCharges = dblCharges + dblSalesTax + dblProcessingFee; 
         
        List<string> lstPaymentInfo = new List<string>(); 
        //- Please follow this order 
        lstPaymentInfo.Add("10012A"); //- Item Number 
        lstPaymentInfo.Add("Tennis Shoes Size 10"); //- Item Description 
        lstPaymentInfo.Add("1"); //- Qty goes here at least 1 
        lstPaymentInfo.Add(dblTotalCharges.ToString()); //- Amount to charge goes here 
        lstPaymentInfo.Add("20160813104523"); //- Invoice Number goes here 
        lstPaymentInfo.Add(""); //- Shipping charges if any goes here otherwise blank 
        lstPaymentInfo.Add(""); //- Handling charges if any goes here otherwise blank 
        lstPaymentInfo.Add(dblSalesTax.ToString()); //- Sales Taxes if any goes here otherwise blank  
         
        //- This part from here down is not necessary could all be blank "" 
        lstPaymentInfo.Add("Jane"); //- First-name 
        lstPaymentInfo.Add("Doe"); //- Last-name 
        lstPaymentInfo.Add("123 Somewhere in the city"); //- Address 
        lstPaymentInfo.Add("New York"); //- City 
        lstPaymentInfo.Add("NY"); //- State 
        lstPaymentInfo.Add("10005"); //- Zipcode 
        lstPaymentInfo.Add("212-555-5555"); //- Telephone 
        lstPaymentInfo.Add("[email protected]"); //- E-Mail 
         
        //- Go to paypal now and collect 
        oGateway.ProcessPayment(lstPaymentInfo);         
    } 

 

HostForLIFE.eu ASP.NET Core 1.0 Hosting

European best, cheap and reliable ASP.NET hosting with instant activation. HostForLIFE.eu is #1 Recommended Windows and ASP.NET hosting in European Continent. With 99.99% Uptime Guaranteed of Relibility, Stability and Performace. HostForLIFE.eu security team is constantly monitoring the entire network for unusual behaviour. We deliver hosting solution including Shared hosting, Cloud hosting, Reseller hosting, Dedicated Servers, and IT as Service for companies of all size.



About HostForLIFE

HostForLIFE is European Windows Hosting Provider which focuses on Windows Platform only. We deliver on-demand hosting solutions including Shared hosting, Reseller Hosting, Cloud Hosting, Dedicated Servers, and IT as a Service for companies of all sizes.

We have offered the latest Windows 2019 Hosting, ASP.NET 5 Hosting, ASP.NET MVC 6 Hosting and SQL 2019 Hosting.


Month List

Tag cloud

Sign in