本章主要解决为什么使用UpdatePanel后,后台方法调ClientScript.RegisterStartupScript()无效问题展开。
把这个方法改为ScriptManager.RegisterClientScriptBlock(UpdatePanel的ID,this.GetType(),key ,"Js方法名()", true);
注意:第四个参数, 我原本是这样写的"<script>js方法名()</script>" 这样写是会失效的!!超重要的一点!!
注意:key不能重复 且不能为空值,不然也是会失效!!!
如果在 protected void Page_Load(object sender, EventArgs e) 方法里面也有用到这个东西,同样也是更新UpdatePanel的信息,那么这个时候不要用这个ScriptManager.RegisterClientScriptBlock,要用
ClientScript.RegisterStartupScript(Page.GetType(), key , "<script>js方法()</script>"); //注意要加<script></script>!!!
不要问我 为什么,因为厂长是我 表哥(开个玩笑~) ,反正就是这样我也不懂,就能够正常地调用了。。
还有还有,在Page_Load里面,因为你是注册脚本,所以每次刷新页面的时候都必须执行到这个注册,不然的话,刷新页面之后UpdatePanel的内容全没了!所以,注册脚本那部分代码在Page_Load里面必须执行,故不能加类似:if(!IsPostBack){}这样的限制
好了说了那么多还是看代码舒服下面代码部分 直接贴了
<div style="display: inline-block;">
<div class="input-group" style="width: 400px;">
<input id="searchcontent" type="text" class="form-control" placeholder="Search for..." runat="server" />
<span class="input-group-btn">
<asp:ImageButton ImageUrl="~/img/SearchIcon.png" CssClass="img_size btn btn-default" ID="SearchBtnQ" runat="server" OnClick="SearchBtn_Click" />
</span>
</div>
</div>
<div style="display: inline-block;">
<input id="add_resourceBtn" style="margin-top: -26px;" type="button" class="btn btn-default" value="添加资源" />
</div>
</div>
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="true">
<ContentTemplate>
<div class="resources_div" id="resources_div">
<%--<span class="file_title glyphicon glyphicon-link"><a href="#">世界顶尖比赛机器人资料大全.pdf</a></span>--%>
</div>
<div style="display: none">
<asp:Button ID="HiddenBtn1" OnClick="HiddenBtn_Click" runat="server" />
</div>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="SearchBtnQ"/>
</Triggers>
</asp:UpdatePanel>
其中<Triggers>的作用是让 在<UpdatePanel>之外的按钮执行后台方法之后 仅更新这个UpdatePanel的意思。
例如上面我按那个ID为SearchBtnQ的图片按钮就会调用后台方法,然后仅刷新UpdatePanel的内容。(已成功!)
而放在UpdatePanel里面的HiddenBtn1 按钮 也是仅会刷新UpdatePanel内容。调用的后台方法如下:
//查询通过类型
public void Query(string type = null)
{
if (type == null)
{
type = this.FileType.Value;
}
int team_id = int.Parse(Request["id"]);
using (IntelligentRobotEntities entities = new IntelligentRobotEntities())
{
IOrderedQueryable<TeamResources> res;
if (type == "all")
{
res = from r in entities.TeamResources
where r.team_id == team_id
orderby r.upload_time descending
select r;
}
else
{
res = from r in entities.TeamResources
where r.team_id == team_id && r.filesuffix == type
orderby r.upload_time descending
select r;
}
foreach (var v in res)
{
//this.label1.Text += v.filename + " | ";
ScriptManager.RegisterClientScriptBlock(this.UpdatePanel1, this.GetType(), "AddTeamResourceItem" + v.id,
"AddResourceItem('" + v.id + "','" + v.filename + "','" + v.uploader + "','" + v.upload_time.ToString("yyyy-MM-dd") + "','" + v.downloadtimes + "')", true);
//ScriptManager.RegisterStartupScript()
//ClientScript.RegisterStartupScript(Page.GetType(), "AddTeamResourceItem" + v.id,
// "<script>AddResourceItem('" + v.id + "','" + v.filename + "','" + v.uploader + "','" + v.upload_time.ToString("yyyy-MM-dd") + "','" + v.downloadtimes + "')</script>");
}
}
}
/// <summary>
/// 隐藏按钮点击事件
/// </summary>
protected void HiddenBtn_Click(object sender, EventArgs e)
{
Query();
}
看到这里基本都 懂了吧。。。。网上的很多人都问 这个东西我就总结了下 方便以后查看吧