所以我的第一个问题是当我们点击按钮时会发生什么?页面刷新或其他东西,因为我正在处理一个小项目并面临问题
<script language="javascript" type="text/javascript">
var totalTime = 0;
var interval = 0;
var min = 0;
var hr = 0;
var sec = 0;
var secstr = 0;
var minstr = 0;
var flag = 0;
window.onload = startResetTimer
function startResetTimer() {
totalTime = 20;
hr = Math.floor(totalTime / 3600);
sec = totalTime % 60;
if (sec == 0)
min = (totalTime / 60) % 60;
flag = 1;
interval = setInterval(function () {
if (flag == 1) {
if (totalTime <= 0) {
flag = 0;
PageMethods.CallIt();
}
else {
totalTime--;
hr = Math.floor(totalTime / 3600)
sec = totalTime % 60
if (sec == 0)
min = (totalTime / 60) % 60
if (sec < 10)
secstr = "0" + sec
else
secstr = sec
if (min < 10)
minstr = "0" + min
else
minstr = min
}
}
console.log(document.getElementById('MainContent_Label2'));
document.getElementById('MainContent_Label2').innerHTML = "" + hr + ":" + minstr + ":" + secstr
}, 1000)
}
</script>
这是计时器代码,当计时器到期时,我正在调用页面方法“CallIt()”//只是调试名称// //asp.net代码
public partial class _Default : System.Web.UI.Page
{
public static _Default obj;
protected void Page_Load(object sender, EventArgs e)
{
obj = this;
}
public void print()
{
Label1.Text = "called form every where";
}
[WebMethod]
public static void CallIt()
{
obj.print();
}
protected void Button1_Click(object sender, EventArgs e)
{
obj.print();
}
}
现在来自CallIt()我调用另一个函数print()来改变“Label1”的文本并从按钮点击调用相同的函数print(),现在当我按下它时它改变了Label1的文本但是当定时器时过期它没有,print()函数被调用我通过使用断点检查这个但它没有反映在页面中。所以我认为页面刷新应该有帮助,所以我放置
if(totalTime <= 0) {
PageMethods.CallIt();
window.location.reload() ;
}
但这会重新启动计时器。
答案 0 :(得分:1)
当你从javascript调用asp.net页面的web方法时,MS javasvript引擎对该页面执行ajax请求,并返回javascript服务调用提供的数据,就是这样。你的CallIt方法没有返回任何内容,所以在javascript中你什么都不会收到,而且正如我所说的其他任何东西都不会被评估,也请不要在静态属性中存储“this”,因为每次请求时你都会重新创建Page对象和你在多客户端环境中可能会出现一些错误。
所以我建议你从你的javascript调用这个方法,收集方法返回的数据,并在浏览器中使用javascript手动更新标签