示例:
实现目的:某对象被使用时,将此对象对应的功能按钮禁止;
后台代码:Page_Load() 事件下的代码
前台代码:对象不确定,这里采用对象的动态绑定
运行效果:页面初始化时,对应的被占用对象的总功能按钮不会被禁止,点击页面中任一按钮时,此功能按钮才会被禁止。
分析:对于页面的初始化,代码执行顺序:
1) Page_Load事件,包括if(!isPostBack){}中的语句;
2)向IE发出请求,IE先执行页面中的脚本语句,此时页面呈现;
对于页面中的按钮,代码执行顺序:
1)IE会先查看此按钮是否有对应的onclientclick()事件,如果有的话,则要去执行这个事件对应的JS脚本。执行完后,若这个脚本返回false,则IE不会进入服务器去执行后台回发事件代码;若这个脚本返回值为true(默认返回值为true),则进入服务器区执行后台代码。
2)若此按钮没有对应的onclientclick()事件,则查看此按钮是否有回发功能(注意:一部分按钮的回发功能需要通过语句 AutoPostBack = "True" 来开启,如 asp:RadioButtonList、asp:TextBox等;
3)若果按钮有回发功能:则根据 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="dyPinlu.aspx.cs" Inherits="ManufacturingManagement_paichan_dyPinlu" %> 语句在解决方案中找到指定的类文件(如:
public partial class ManufacturingManagement_paichan_dyPinlu : System.Web.UI.Page
{}
);故这里需注意,后台中不要有相同名字的子类;
4)继3)所述的动作后,IE会先执行Page_Load事件中的代码,当然,此时不会再执行if(!IsPostBack){}中的语句。然后再执行按钮对应的后台Click事件中的代码,执行完成后返回客户端并将执行结果返回给IE,此时IE会将页面中的Js脚本执行了(当然,如果这个JS是在页面载入时会执行的话,例如直接在<script language >alert("ddd")</script>就会被IE执行)。
解决方法:在后台if(!IsPostBack)进行动态绑定,并初始化,为保证被使用对象及时被禁止,在Page_Load下写禁止功能代码
if (!IsPostBack)
{ rblShebeihao.DataSourceID = "SqlDataSource3"; rblShebeihao.DataTextField = "FurnaceBanchNum"; rblShebeihao.DataValueField = "FurnaceBanchNum"; rblShebeihao.DataBind(); ...... }前台代码 <asp:RadioButtonList ID="rblShebeihao" runat="server"
RepeatDirection="Horizontal" AutoPostBack = "True" OnSelectedIndexChanged = "shebei_SelectedIndexChanged" > </asp:RadioButtonList>