大家好!我今天碰到了一个奇怪的问题。现在简单描述如下(由于是公司的控件,省去大部分代码):
我有一个pagebar控件,render方法为:
protected override void Render(HtmlTextWriter writer)
{
writer.Write("<script language='javascript'>\n");
writer.Write("function " + this.UniqueID + "ChangePage(page)\n");
writer.Write(@"{");
writer.Write("if (page == {0}) return;\n",this.CurrentPage);
writer.Write("if (page > {0} || page < 1 || isNaN(page))", this.PageCount);
writer.Write(@"
{
alert('请输入正确的页码!');
return;
}
");
writer.Write("__doPostBack('" + this.UniqueID + "',page)");
//writer.Write(Page.ClientScript.GetPostBackEventReference(this, "page"));
writer.Write(@"
}
</script>
");
.....此处省略其他输出内容
base.Render(writer);
}
这个控件用在了一个使用了ajax的页面中。所有控件都在一个scriptmanager的updatepanel中,第一次载入,由于pagecount=1,所以里面那个js的内容有一句为:
if (page > 1 || page < 1 || isNaN(page)).这是正确的。
但是我点击了页面的按钮提交了新的查询条件,这时候pagecount变为了3,按理说新页面的js的话应该变为:
if (page > 3 || page < 1 || isNaN(page))。
但是实际上不是这样的,页面上还是if (page > 1 || page < 1 || isNaN(page)).导致输入2,3会提示错误。但是我跟踪源代码发现到base.Render(writer);处write里面的内容确实是if (page > 3 || page < 1 || isNaN(page)),但是为什么最后到了页面上没有变化呢?是因为ajax的原因吗?ajax局部刷新的条件是什么?难道是因为这个js的方法名称和参数都没有变化就没有render吗?请各位指教。
我有一个pagebar控件,render方法为:
protected override void Render(HtmlTextWriter writer)
{
writer.Write("<script language='javascript'>\n");
writer.Write("function " + this.UniqueID + "ChangePage(page)\n");
writer.Write(@"{");
writer.Write("if (page == {0}) return;\n",this.CurrentPage);
writer.Write("if (page > {0} || page < 1 || isNaN(page))", this.PageCount);
writer.Write(@"
{
alert('请输入正确的页码!');
return;
}
");
writer.Write("__doPostBack('" + this.UniqueID + "',page)");
//writer.Write(Page.ClientScript.GetPostBackEventReference(this, "page"));
writer.Write(@"
}
</script>
");
.....此处省略其他输出内容
base.Render(writer);
}
这个控件用在了一个使用了ajax的页面中。所有控件都在一个scriptmanager的updatepanel中,第一次载入,由于pagecount=1,所以里面那个js的内容有一句为:
if (page > 1 || page < 1 || isNaN(page)).这是正确的。
但是我点击了页面的按钮提交了新的查询条件,这时候pagecount变为了3,按理说新页面的js的话应该变为:
if (page > 3 || page < 1 || isNaN(page))。
但是实际上不是这样的,页面上还是if (page > 1 || page < 1 || isNaN(page)).导致输入2,3会提示错误。但是我跟踪源代码发现到base.Render(writer);处write里面的内容确实是if (page > 3 || page < 1 || isNaN(page)),但是为什么最后到了页面上没有变化呢?是因为ajax的原因吗?ajax局部刷新的条件是什么?难道是因为这个js的方法名称和参数都没有变化就没有render吗?请各位指教。
我猜的比如public int Page{
get{return (ViewSate["Page"]==null)?1:(int)ViewSate["Page"];}
set{ViewSate["Page"]=value;}
}
public int PageCount
{
get
{
return (this.RecordCount == 0 ? 0 : (int)Math.Ceiling((double)this.RecordCount / this.PageSize));
}
}public int RecordCount
{
get
{
return (ViewState[this.UniqueID + "RecordCount"] == null) ? 0 : (int)ViewState[this.UniqueID + "RecordCount"];
} set
{
ViewState[this.UniqueID + "RecordCount"] = value;
}
}
并且跟踪的时候pagecount确实是3了已经。并且htmltextwriter中的js也是对的。就是页面出来以后还是不变。
ScriptManager.RegisterStartupScript(this.UpdatePanel1, this.GetType(), "UpdateSucceed", "alert('Update time succeed!')", true);
//默认调用方式(在异步调用XmlHttp方式中无效)
//Page.ClientScript.RegisterStartupScript(this.GetType(), "UpdateSucceed", "<script>alert('Update time succeed!')</script>");Asp.net Ajax框架教程:
http://blog.csdn.net/ChengKing/archive/2008/01/09/2032497.aspx