Zainab Mostafa Ответов: 2

Автоматическое обновление чата из базы данных


У меня есть страница чата в моем ASP.net веб сайт и я хочу код для автоматического обновления чата при поступлении нового сообщения в базу данных
Я использую SQL , ASP.net и с#

Что я уже пробовал:

Я попробовал какой-то код, но он не работал так, как мне нужно

Richard MacCutchan

Это не тот вопрос, на который можно ответить. Если вам нужна помощь, пожалуйста, предоставьте некоторые правильные детали вашей проблемы; мы не можем догадаться, что делает ваш код.

[no name]

с какой проблемой вы столкнулись и что вы пробовали?

Richard MacCutchan

"Я попробовал какой-то код, но он не работал так, как мне нужно"
Если вы не предоставите более подробную информацию, мы не сможем догадаться, в чем заключается проблема.

2 Ответов

Рейтинг:
2

Vincent Maverick Durano

Вы должны посмотреть на ASP.NET SignalR для обновления в режиме реального времени: Учебник: чат в реальном времени с SignalR 2 Вы даже можете использовать SqlDependency для запуска автоматических обновлений с помощью SignalR: Уведомления об изменении базы данных в ASP.NET использование SignalR и SqlDependency - TechBrij[^]

Кроме того, вы можете попробовать традиционный способ использования метода опроса AJAX, как и в этой статье: ASP.NET MVC: реализация функции ShoutBox с помощью jQuery и AJAX


Рейтинг:
2

Zainab Mostafa

это нам мой код :

<pre><%@ Page Language="C#" AutoEventWireup="true" CodeFile="allchats.aspx.cs" MaintainScrollPositionOnPostback="true" Inherits="chat_allchats" %>

 <link href="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">
<script src="//maxcdn.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<!------ Include the above in your HEAD tag ---------->

<!DOCTYPE html>
<html>
	<head>
		<title>Chat</title>
		<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
		<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.5.0/css/all.css" integrity="sha384-B4dIYHKNBt8Bc12p+WXckhzcICo0wtJAoU8YZTY5qE0Id1GSseTk6S+L3BlXeVIU" crossorigin="anonymous">
		<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
		<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/malihu-custom-scrollbar-plugin/3.1.5/jquery.mCustomScrollbar.min.css">
		<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/malihu-custom-scrollbar-plugin/3.1.5/jquery.mCustomScrollbar.min.js"></script>
	<style>
     	body,html{
			height: 100%;
			margin: 0;
			background: #7F7FD5;
	       background: -webkit-linear-gradient(to right, #91EAE4, #86A8E7, #7F7FD5);
	        background: linear-gradient(to right, #91EAE4, #86A8E7, #7F7FD5);
		}

		.chat{
			margin-top: auto;
			margin-bottom: auto;
		}
		.card{
			height: 500px;
			border-radius: 15px !important;
			background-color: rgba(0,0,0,0.4) !important;
		}
		.contacts_body{
			padding:  0.75rem 0 !important;
			overflow-y: auto;
			white-space: nowrap;
		}
		.msg_card_body{
			overflow-y: auto;
		}
		.card-header{
			border-radius: 15px 15px 0 0 !important;
			border-bottom: 0 !important;
		}
	 .card-footer{
		border-radius: 0 0 15px 15px !important;
			border-top: 0 !important;
	}
		.container{
			align-content: center;
		}
		.search{
			border-radius: 15px 0 0 15px !important;
			background-color: rgba(0,0,0,0.3) !important;
			border:0 !important;
			color:white !important;
		}
		.search:focus{
		     box-shadow:none !important;
           outline:0px !important;
		}
		.type_msg{
			background-color: rgba(0,0,0,0.3) !important;
			border:0 !important;
			color:white !important;
			height: 60px !important;
			overflow-y: auto;
		}
			.type_msg:focus{
		     box-shadow:none !important;
           outline:0px !important;
		}
		.attach_btn{
	border-radius: 15px 0 0 15px !important;
	background-color: rgba(0,0,0,0.3) !important;
			border:0 !important;
			color: white !important;
			cursor: pointer;
		}
		.send_btn{
	border-radius: 0 15px 15px 0 !important;
	background-color: rgba(0,0,0,0.3) !important;
			border:0 !important;
			color: white !important;
			cursor: pointer;
		}
		.search_btn{
			border-radius: 0 15px 15px 0 !important;
			background-color: rgba(0,0,0,0.3) !important;
			border:0 !important;
			color: white !important;
			cursor: pointer;
		}
		.contacts{
			list-style: none;
			padding: 0;
		}
		.contacts li{
			width: 100% !important;
			padding: 5px 10px;
			margin-bottom: 15px !important;
		}
	.active{
			background-color: rgba(0,0,0,0.3);
	}
		.user_img{
			height: 70px;
			width: 70px;
			border:1.5px solid #f5f6fa;
		
		}
		.user_img_msg{
			height: 40px;
			width: 40px;
			border:1.5px solid #f5f6fa;
		
		}
	.img_cont{
			position: relative;
			height: 70px;
			width: 70px;
	}
	.img_cont_msg{
			height: 40px;
			width: 40px;
	}
	.online_icon{
		position: absolute;
		height: 15px;
		width:15px;
		background-color: #4cd137;
		border-radius: 50%;
		bottom: 0.2em;
		right: 0.4em;
		border:1.5px solid white;
	}
	.offline{
		background-color: #c23616 !important;
	}
	.user_info{
		margin-top: auto;
		margin-bottom: auto;
		margin-left: 15px;
	}
	.user_info span{
		font-size: 20px;
		color: white;
	}
	.user_info p{
	font-size: 10px;
	color: rgba(255,255,255,0.6);
	}
	.video_cam{
		margin-left: 50px;
		margin-top: 5px;
	}
	.video_cam span{
		color: white;
		font-size: 20px;
		cursor: pointer;
		margin-right: 20px;
	}
	.msg_cotainer{
		margin-top: auto;
		margin-bottom: auto;
		margin-left: 10px;
		border-radius: 25px;
		background-color: #82ccdd;
		padding: 10px;
		position: relative;
	}
	.msg_cotainer_send{
		margin-top: auto;
		margin-bottom: auto;
		margin-right: 10px;
		border-radius: 25px;
		background-color: #78e08f;
		padding: 10px;
		position: relative;
	}
	.msg_time{
		position: absolute;
		left: 0;
		bottom: -15px;
		color: rgba(255,255,255,0.5);
		font-size: 10px;
	}
	.msg_time_send{
		position: absolute;
		right:0;
		bottom: -15px;
		color: rgba(255,255,255,0.5);
		font-size: 10px;
	}
	.msg_head{
		position: relative;
	}
	#action_menu_btn{
		position: absolute;
		right: 10px;
		top: 10px;
		color: white;
		cursor: pointer;
		font-size: 20px;
	}
	.action_menu{
		z-index: 1;
		position: absolute;
		padding: 15px 0;
		background-color: rgba(0,0,0,0.5);
		color: white;
		border-radius: 15px;
		top: 30px;
		right: 15px;
		display: none;
	}
	.action_menu ul{
		list-style: none;
		padding: 0;
	margin: 0;
	}
	.action_menu ul li{
		width: 100%;
		padding: 10px 15px;
		margin-bottom: 5px;
	}
	.action_menu ul li i{
		padding-right: 10px;
	
	}
	.action_menu ul li:hover{
		cursor: pointer;
		background-color: rgba(0,0,0,0.2);
	}
	@media(max-width: 576px){
	.contacts_card{
		margin-bottom: 15px !important;
	}
	}
	</style>
    </head>
    <body>
         <form runat="server">

          
    <% EccoSchoolEntities db = new EccoSchoolEntities();
                    string r = "",u="",n="",f="";
                    if(Session["role"]!=null && Session["user_id"]!=null )

                    {
                        r = Session["role"].ToString();
                        u = Session["user_id"].ToString();


                        if(r=="student" || r=="Teacher")
                        {

                          
                            

                        }else {
                        Response.Redirect("/login.aspx");
                    }


                    }
                    else
                    {
                        Response.Redirect("/login.aspx");
                    }
                    int uu = int.Parse(u);
                    // var j = db.messages.Any(a => a.reciever_id == uu);
                  //  var x = (from s in db.messages where s.del == false && s.reciever_id == uu select new { s}).Count();

                  //  var num = x.ToString();
                   
                    


                     %>
        
    	<div class="container-fluid h-100">
			<div class="row justify-content-center h-100">
				<div class="col-md-4 col-xl-3 chat">
                    <div class="card mb-sm-3 mb-md-0 contacts_card">
					<div class="card-header">
						<div class="input-group">
							<%--<input type="text" placeholder="Search..." name="" onkeyup="myFunction1()" id="s1" class="form-control search">--%>
							<%--<div class="input-group-prepend">
								<span class="input-group-text search_btn"></span>
							</div>--%>
						</div>
					</div>
                       <% 
               var xx = (from s in db.chat where s.del == false && (s.reciever_id == uu ||s.sender_id==uu) select new { s}).ToList();
               if (xx != null)
               {
                   foreach (var item in xx)
                   {
                       DateTime d = DateTime.Parse(item.s.date.ToString());

                                 %>
					<div class="card-body contacts_body" id="mytable">
						<ui class="contacts">
						<li class="active">
							<div class="d-flex bd-highlight">
								<div class="img_cont">
																		<a href="allchats.aspx?s_id=<%=item.s.sender_id %>&&r_id=<%=item.s.reciever_id %>"><img src="../assets/img/1.png" class="rounded-circle user_img"/></a>
	<span class="online_icon"></span>
								</div>
								<div class="user_info">
									   <%if (uu == item.s.reciever_id)
                                            { %>
									<span><%=item.s.sender_name %></span>
                                     <%}%>
                                    <%else if (uu == item.s.sender_id)
                                            { %>
									<span><%=item.s.reciever_name %></span>
                                    <%} %>
									<p> online</p>
								</div>
                                <%}
                            } %>
							</div>
						</li>
						
						</ui>
					</div>
					<div class="card-footer"></div>
				</div></div>
                 <% 
                     if (!String.IsNullOrEmpty(Convert.ToString(Request.QueryString["s_id"])) && !String.IsNullOrEmpty(Convert.ToString(Request.QueryString["r_id"])))
                     {
                         int s_id = int.Parse(Request.QueryString["s_id"].ToString());
                         int r_id = int.Parse(Request.QueryString["r_id"].ToString());

                         var xxc = (from s in db.messages where s.del == false && ((s.reciever_id == r_id && s.sender_id == s_id) ||(s.reciever_id == s_id && s.sender_id == r_id) ) select new { s }).Count();
                         var xx2 = (from s in db.chat