当前位置: 代码迷 >> ASP.NET >> 开发时遇到的有关问题,关于刷新和实时提示的,新手请问了,大家多帮忙了~
  详细解决方案

开发时遇到的有关问题,关于刷新和实时提示的,新手请问了,大家多帮忙了~

热度:9999   发布时间:2013-02-25 00:00:00.0
开发时遇到的问题,关于刷新和实时提示的,新手请教了,大家多帮忙了~~
现在在做一个会议室预订系统,我在国企的一个软件部门,搞web开发的就我一个...所以遇到问题没人指点,只能劳烦大家了!
问题:我想要实现当用户预订了会议室以后,管理者的页面不需要刷新就能显示一个提示.我有两个想法:
想法1:我知道用ajax应该可以做,在管理者界面设一个带有gif图片的imagebutton.管理者界面定时向服务器发消息,服务器收到这个消息就查数据库看是否有新预订,如果有就告诉管理者界面,管理者界面就显示这个imagebutton.但是ajax我只看过基础的东东,不会弄,而且我不知道用ajax的时候怎么能让imagebutton实时的隐藏和显示.请大家给个解决方案吧,越详细越好,尤其是页面的javascript的代码.
想法2:我不太会用ajax,项目又比较急,我想用比较土的办法,干脆让管理者界面定时刷新,我就在管理者页面加了刷新代码如下:
<script language="javascript">  
  setTimeout("window.location.reload(true)",60000);
</script>
但是时间一到出现"不重新发送信息,则无法刷新网页 "的提示,我的页面有一个最原始的gridview(就是拖到页面没做任何修改),gridview的内容和数据源都是动态加载的.这个问题怎么产生的?怎么解决?

这里有两种方法,帮我解决一个就给分,给一个新的解决方案也行!我水平比较低,学.net没多久,请写得详细一点.本来要给200分的,但是系统不让我给....先谢谢大家了~

------解决方案--------------------------------------------------------
我想你用Ajax请求页面,应该会吧,那点就省略了,
在后台,你比如有个CheckHasMessage()这样的一个方法
public void CheckHasMessage()
{
 //检查是否有数据
bool flag = 是否有数据标志
Response.Write(flag);
Response.End();
}
比如你用CallBack来接受这个XmlRequest对象
那你需要在Js页面中,加一个函数
function CallBack(ob)
{
var flag = ob.responseText;
if(flag.toLowerCase() == "true")
{
document.getElementById('ImageButton的ClientID').style.display = "block";

}

主要是这样的一个流程,具体的你再相应的修改一下吧
------解决方案--------------------------------------------------------
setTimeout("frmRefresh.submit()",60000)
------解决方案--------------------------------------------------------

var xmlHttp,alerted;
function createXMLHttpRequest() 

try { 
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP") 
} catch (e) { 
try { 
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP") 
} catch (E) { 
alert("请安装Microsofts XML parsers") 


if (!xmlHttp && !alerted) { 
try { 
xmlHttp = new XMLHttpRequest(); 
} catch (e) { 
alert("你的浏览器不支持XMLHttpRequest对象,请升级"); 




function handleStateChange(){
var img = "<img src='images/loading.gif' >";
 
if(xmlHttp.readystate == 4)
{ //表示请求状态 4为完成
 
if(xmlHttp.status == 200){ //http状态指示码,200表示ok
//将服务器返回信息作为文本插入到DIV容器中。
 
 
if(xmlHttp.responseText=="<font color='green' style='font-size:12px'>恭喜!此用户名可以使用</font>")
{
$('Button1').disabled="";
}
else if(xmlHttp.responseText=="<font color='red' style='font-size:12px'>已经存在该用户名</font>"){
$('Button1').disabled="disabled";
}
else if(xmlHttp.responseText=="<font color='red' style='font-size:12px'>不能为空</font>")
{
$('Button1').disabled="disabled";

}
 document.getElementById("data").innerHTML = xmlHttp.responseText; 
}
}
else 
{
document.getElementById("data").innerHTML = img;
}
//若响应未完成的话,则显示loading..
}

function showResult(){
var url = 'ajaxRequest/UserRegRequest.aspx?uName='+document.getElementById("TextBox1").value;
createXMLHttpRequest();
//请求状态改变事件触发handleStateChange功能
xmlHttp.onreadystatechange = handleStateChange; 
xmlHttp.open("GET",url); 
xmlHttp.send(null); 
}


这是我项目里 用户注册时判断用户名是否存在的ajax。 你可以改下,
你可以定时去调用函数
setTimeout("showResult(),"60000)
------解决方案--------------------------------------------------------
不定要ajax啊,隐藏的iframe也可以,只是浏览器会出现进度条

使用隐藏的iframe+meta来定时刷新iframe的页面,然后iframe输出js,此js使用parent对象来操作父页
------解决方案--------------------------------------------------------
父页面
HTML code
<head runat="server">    <title>title>    <script language="javascript">        function setCurrentTime(strTime)        {            document.getElementById("currentTime").innerHTML = strTime;        }                function refresh()        {            document.getElementById('iframe').src =                 "IFramePage.aspx?" + new Date();        }    </script></head><body style="font-family:Verdana; font-size:13px;">    <form id="form1" runat="server">        <div>            <b>Page Load:</b>            <span><%= DateTime.Now.ToLocalTime() %></span>        </div>        <div>            <b>Current Time:</b>            <span id="currentTime"></span>        </div>        <input type="button" value="Refresh" onclick="refresh()" />    </form>    <iframe id="iframe" style="display:none"></iframe> <%--隐藏子页面--%></body>
------解决方案--------------------------------------------------------
帮你改良一下:
<head runat="server"> 
<title>无标题页 </title> 
<script language="JavaScript"> 
function setCurrentState(str) 

document.getElementById("currentState").innerHTML = str; 


function refresh()
{
document.getElementById('iframe').src = "iframePage.aspx?" + new Date(); 
setTimeout("refresh() ;",10000) 

</script> 
</head> 
<body onLoad="refresh()"> 
<form id="form1" runat="server"> 
<div> 
<b>Current State: </b> 
<span id="currentState"> </span> 
</div> 
</form> 
<script id="iframe" language="JavaScript"></script> --**注意这里
</body> 

子页面里,我在cs代码里面写: 
protected void Page_Load(object sender, EventArgs e) 

if (!IsPostBack) 

SqlConnection con = new SqlConnection("server=.;database=MeetingRooms;uid=sa;pwd=****"); 
SqlCommand cmd = new SqlCommand("select * from [using rooms] where state='待接受' or state='取消确认中'", con); 
con.Open(); 
SqlDataReader sdr = cmd.ExecuteReader(); 
if (sdr.Read()) 

Response.Write("setCurrentState('有新的预订');"); 

else 

Response.Write("setCurrentTime('没有有新的预订');"); 

con.Close(); 



*注意:该页的aspx文件必须只删得只剩下最上面一行。
*注意2:如果没反应的话,直接在IE窗口输入iframePage.aspx的URL看看里面的HTML是什么
------解决方案--------------------------------------------------------
问题:我想要实现当用户预订了会议室以后,管理者的页面不需要刷新就能显示一个提示.
------------------------------------------------------------------
这个简单呀! 两个UpdatePanel 一个放Timer 一个放TextBox做提示 定时查询数据库吧条数统计出来放到Session里 比较他们之间大小就可以判断是不是又新的数据插入 然后给TextBox赋值 显示就行了~!
要不你去我CSDN的资源里下个示例 对了那个示例还用到了一个弹出消息框的自定义控件 是在网上下的 很好用 叫popupWin 我里面实现就是这么做的
  相关解决方案