پیاده سازی Like ، DisLike با استفاده از Ajax درASP

دوشنبه 9 آذر 1394

در این مقاله قصد داریم با استفاده از Ajax ، کاربر، یک پیام را بدون لاگین شدن و با استفاده از IP بتواند لایک و یا دیس لایک کند را درASP آموزش دهیم .

پیاده سازی Like ، DisLike با استفاده از Ajax درASP

برای شروع یک  بانک اطلاعاتی به نام   Test که حاوی دو جدول  به نام likesو postsرا ایجاد میکنیم

حال یک پروژه از نوع ASP ایجاد کرده ویک webfrom به  نام 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>likes</title>
    <link href="bootstrap.min.css" rel="stylesheet" />
    <script type="text/javascript" src="js/jquery-1.9.1.min.js"></script>
    <script type="text/javascript" src="js/mys.js"></script>
</head>
<body>
    <form id="form1" runat="server">
        <div class="container">


            <div class="panel panel-default">
                <div class="panel-heading">نظرات </div>
                <div class="panel-body">

<asp:Repeater ID="rep" runat="server">
                                    <ItemTemplate>
                    <div class="media" style="border: 1px solid #cccccc ">
                        <div class="media-left">
                          
                                

 <div class="post-top" style="margin-right: 50px"><%#DataBinder.Eval(Container.DataItem,"p_title")%></div>
                                            <div class="likes">
                                                <div class="like">
                                                    <img data="<%#DataBinder.Eval(Container.DataItem,"id")%>" class="like-btn" src="Untitled-1.png" style="width: 40px" />
                                                    <span class="l_count"></span>
                                                </div>
                                                <div class="clearfix"></div>
                                                <div class="like" >
                                                    <img data="<%#DataBinder.Eval(Container.DataItem,"id")%>" class="dislike-btn" src="Untitled2-1.png" style="width: 40px" />
                                                    <span class="d_count"></span>
                                                </div>
                                            </div>
       

                                        <div class="post" style="margin-right: 50px" >
                                           
  <%#DataBinder.Eval(Container.DataItem,"p_body")%>
                                        </div>
                                                                         
                                        </div>
                                 
                        
                         
                        </div>
   </ItemTemplate>
                                </asp:Repeater>
                    </div>

                </div>
            </div>
       
    </form>
</body>
</html>

 

ما در این روش از ADO.Net استفاده کرده ایم کد های Tsq را دریک کلاسی به نام DAL ایجاد کرده ایم

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;


/// <summary>
/// Summary description for DAL
/// </summary>
public class DAL
{
        SqlConnection cnn;
        SqlCommand cmd;
        SqlDataAdapter da;
	    public DAL()
	    {
		        cnn = new SqlConnection();
                cmd = new SqlCommand();
                da = new SqlDataAdapter();
                cmd.Connection = cnn;
                da.SelectCommand = cmd;
	    }

        public  void connect()
        {
            string cs = @"Server=.;Database=test;Integrated Security=True";
            cnn.ConnectionString = cs;
            cnn.Open();
        }
        public  void disconnect()
        {
            cnn.Close();
        }
        public DataTable select(string sql)
        {
            DataTable dt = new DataTable();
            cmd.CommandText = sql;
            da.Fill(dt);
            return dt;
        }
        public DataRow selectRow(string sql)
        {
            DataRow dr;
            DataTable dt = new DataTable();
            cmd.CommandText = sql;
            da.Fill(dt);
            dr = dt.Rows[0];
            return dr;
        }
        public DataColumn SelectColumn(string sql)
        {
            DataTable dt = new DataTable();
            DataColumn dc = new DataColumn();
            cmd.CommandText = sql;
            da.Fill(dt);
            dc = dt.Columns[0];
            return dc;
        }

        public SqlDataReader Reader(string sql)
        {
            cmd.CommandText = sql;
            SqlDataReader dr = cmd.ExecuteReader();
            return dr;
        }
        public void docommand(SqlCommand cmd)
        {
            cmd.ExecuteNonQuery();
        }
        public void docommand(string sql)
        {
            cmd.CommandText = sql;
            cmd.ExecuteNonQuery();
        }
        public string GetOneString(string sql)
        {
            string Answer = "";
            cmd.CommandText = sql;
            object ob = cmd.ExecuteScalar();
            if (ob == DBNull.Value)
            {
                Answer = "";
            }
            else
            {
                Answer = Convert.ToString(ob);
            }
            return Answer;
        }
        public int GetOneInt(string sql)
        {
            int Answer;
            cmd.CommandText = sql;
            object ob = cmd.ExecuteScalar();
            Answer = Convert.ToInt32(ob);
            return Answer;
        }
        public bool GetOneBool(string sql)
        {
            bool Answer;
            cmd.CommandText = sql;
            object ob = cmd.ExecuteScalar();
            Answer = Convert.ToBoolean(ob);
            return Answer;
        }
 
}

حال یک کنترلر برای لایک و دیس لایک و گرفتن IP کابر به نام ajax ایجاد میکنیم

public partial class ajx : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        
        string func = Request.QueryString["func"].ToString();
        int id = Convert.ToInt16(Request.QueryString["id"].ToString());
        
        switch (func)
        {
            case "updatelike": updatelike(id);
                break;
            case "updatedislike": updatedislike(id);
                break;
            case "showlike": showlike(id);
                break;
            case "showdislike": showdislike(id);
                break;
            default:
                break;
        }
        
    }
    //functions
    private void updatelike(int id)
    {
        if (!User_Validate(id))
        {
            Response.Write("رای شما قبلا برای این مطلب ثبت شده است");
            return;
        }  
        DAL data = new DAL();
        data.connect();
        string sql = "SELECT up FROM posts WHERE id={0}";
        sql = string.Format(sql, id);
        int up = data.GetOneInt(sql);
        sql = "UPDATE posts SET up={0} WHERE id={1}";
        sql = string.Format(sql,++up,id);
        data.docommand(sql);
        sql = "INSERT INTO likes (p_id,ip,date) VALUES('{0}','{1}','{2}')";
        sql = string.Format(sql, id, Get_User_Ip(), DateTime.Now.ToShortDateString());
        data.docommand(sql);
        data.disconnect();
        Response.Write(++up);
        
    }
    /******************************************************/
    private void updatedislike(int id)
    {
        if (!User_Validate(id))
        {
            Response.Write("رای شما قبلا برای این مطلب ثبت شده است");
            return;
        }  
        DAL data = new DAL();
        data.connect();
        string sql = "SELECT down FROM posts WHERE id={0}";
        sql = string.Format(sql, id);
        int down = data.GetOneInt(sql);
        sql = "UPDATE posts SET down={0} WHERE id={1}";
        sql = string.Format(sql, ++down, id);
        data.docommand(sql);
        sql = "INSERT INTO likes (p_id,ip,date) VALUES('{0}','{1}','{2}')";
        sql = string.Format(sql, id, Get_User_Ip(), DateTime.Now.ToShortDateString());
        data.docommand(sql);
        data.disconnect();
        Response.Write(++down);

    }
    /******************************************************/
    private void showlike(int id)
    {
        DAL data = new DAL();
        data.connect();
        string sql = "SELECT up FROM posts WHERE id={0}";
        sql = string.Format(sql, id);
        int up = data.GetOneInt(sql);
        data.disconnect();
        Response.Write(up);

    }
    /******************************************************/
    private void showdislike(int id)
    {
        DAL data = new DAL();
        data.connect();
        string sql = "SELECT down FROM posts WHERE id={0}";
        sql = string.Format(sql, id);
        int down = data.GetOneInt(sql);
        data.disconnect();
        Response.Write(down);

    }
    /******************************************************/
    private bool User_Validate(int id)
    {

       return (Get_User_Ip_Db(id)==Get_User_Ip())? false:true;
        
    }

    private string Get_User_Ip()
    {
        if (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
        {
            return Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
        }
        else
        {
            return Request.ServerVariables["REMOTE_ADDR"];
            
        }
    }

    private string Get_User_Ip_Db(int id)
    {
        DAL data = new DAL();
        data.connect();
        string sql = "SELECT ip FROM likes WHERE p_id={0}";
        sql = string.Format(sql,id);
        string ip=data.GetOneString(sql);
        data.disconnect();
        return ip;
    }
}

دوستان عزیر لازم بذکر است کد های Ajax را درbarnamenevisan.js قرار داده ایم

حال از برنامه اجرا بگرید

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید