2月 27

母版页和内容页都可以包含控件的事件处理程序。对于控件而言,事件是在本地处理的,即内容页中的控件在内容页中引发事件,母版页中的控件在母版页中引发事件。控件事件不会从内容页发送到母版页。同样,也不能在内容页中处理来自母版页控件的事件。

      在某些情况下,内容页和母版页中会引发相同的事件。例如,两者都引发 InitLoad 事件。引发事件的一般规则是初始化事件从最里面的控件向最外面的控件引发,所有其他事件则从最外面的控件向最里面的控件引发。请记住,母版页会合并到内容页中并被视为内容页中的一个控件,这一点十分有用。

下面是母版页与内容页合并后事件的发生顺序:

  1. 母版页控件 Init 事件。

  2. 内容控件 Init 事件。

  3. 母版页 Init 事件。

  4. 内容页 Init 事件。

  5. 内容页 Load 事件。

  6. 母版页 Load 事件。

  7. 内容控件 Load 事件。

  8. 内容页 PreRender 事件。

  9. 母版页 PreRender 事件。

  10. 母版页控件 PreRender 事件。

  11. 内容控件 PreRender 事件。

       母版页和内容页中的事件顺序对于页面开发人员并不重要。但是,如果您创建的事件处理程序取决于某些事件的可用性,那么您将发现,了解母版页和内容页中的事件顺序很有帮助。

written by ocean

2月 27

今天在工作中看了看了参与项目中的代码,发现一个好玩的简单Ajax方法

后台必须继承 System.Web.UI.Page, ICallbackEventHandler

需要有两个必须成员方法

   private string result = string.Empty;

    public void RaiseCallbackEvent(string eventArgument)
    {
        result = eventArgument + System.DateTime.Now.ToString();
    }

    public string GetCallbackResult()
    {
        return result;
    }

RaiseCallbackEvent     这个方法是前台到后台的接口

eventArgument 这个是前台到后台的参数

前台

function Button1_onclick() {

var arg=document.getElementById("Text1").value;

   <%= ClientScript.GetCallbackEventReference(this, "arg", "SuccessFunction", "")%>;

}

function SuccessFunction(result){
   
    alert(result)
}

已非常简单的代码实现了ajax

整个代码

前台:

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>

<script language="javascript" type="text/javascript">
// <!CDATA[

function Button1_onclick() {

var arg=document.getElementById("Text1").value;

   <%= ClientScript.GetCallbackEventReference(this, "arg", "SuccessFunction", "")%>;

}

function SuccessFunction(result){
   
    alert(result)
}
// ]]>
</script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
   
    </div>
    </form>
    <p>
        <input id="Text1" type="text" /></p>
    <p>
        <input id="Button1" type="button" value="和后台交互" onclick="return Button1_onclick()" /></p>
</body>
</html>

后台:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class ClientScript_test : System.Web.UI.Page, ICallbackEventHandler

{

    private string result = string.Empty;

    protected void Page_Load(object sender, EventArgs e)
    {

    }

    public void RaiseCallbackEvent(string eventArgument)
    {
        result = eventArgument + System.DateTime.Now.ToString();
    }

    public string GetCallbackResult()
    {
        return result;
    }

}

written by ocean

2月 27

      var objs = document.getElementsByTagName("input");
           

        var arg="";
       
        for(var i=0; i<objs.length; i++)    
        {
                    if(objs[i].type=="checkbox" )
                    {
                            if(objs[i].checked)
                            {
                                 arg+=objs[i].name+";"+objs[i].id+"|"
                            }
                    }
                    if(objs[i].type=="radio" )
                    {
                            if(objs[i].checked)
                            {
                                 arg+=objs[i].name+";"+objs[i].id+"|"
                            }
                    }
        }

written by ocean

2月 26

C#代码与javaScript函数的相互调用

问:
1.如何在JavaScript访问C#函数?
2.如何在JavaScript访问C#变量?
3.如何在C#中访问JavaScript的已有变量?
4.如何在C#中访问JavaScript函数?

问题1答案如下:
javaScript函数中执行C#代码中的函数:
方法一:1、首先建立一个按钮,在后台将调用或处理的内容写入button_click中;
          2、在前台写一个js函数,内容为document.getElementById("btn1").click();
          3、在前台或后台调用js函数,激发click事件,等于访问后台c#函数;

方法二:1、函数声明为public              
             后台代码(把public改成protected也可以)
             public string ss()
             {
                return("a");
             }
          2、在html里用<%=fucntion()%>可以调用
             前台脚本
             <script language=javascript>
             var a = "<%=ss()%>";
             alert(a);
             </script>
方法三:1、<script language="javascript">
             <!–
             function __doPostBack(eventTarget, eventArgument)
             {
                var theForm = document.Form1;        //指runat=server的form
                theForm.__EVENTTARGET.value = eventTarget;
                theFrom.__EVENTARGUMENT.value = eventArgument;
                theForm.submit();
             }
             –>
             </script>
             <input id="Button1" type="button" name="Button1" value="按钮" onclick="javascript:__doPostBack('Button1','')">
       
方法四:<script language="javascript">
function SubmitKeyClick()
{
      if (event.keyCode == 13)
      {
          event.cancelBubble = true;
          event.returnValue = false;
          document.all.FunName.value="你要调用的函数名";
          document.form[0].submit();
      }
}
</script>

<INPUT onkeypress="SubmitKeyClick()" id="aaa" type="text">
<input type="hidden" name="FunName"> 〈!–用来存储你要调用的函数 –〉

在.CS里有:
public Page_OnLoad()
{
if (!Page.IsPost())
{
string strFunName=Request.Form["FunName"]!=null?Request.Form["FunName"]:"";
//根据传回来的值决定调用哪个函数
switch(strFunName)
{
case "enter()":
enter() ; //调用该函数
break;
case "其他":
//调用其他函数
break;
default:
//调用默认函数
break;
}
}
}

public void enter()
{
//……比如计算某值
}

问题2.如何在JavaScript访问C#变量?
答案如下:
方法一:1、通过页面上隐藏域访问<input id="xx" type="hidden" runat="server">
方法二:1、如后台定义了PUBLIC STRING N;前台js中引用该变量的格式为'<%=n%>'或"+<%=n%>+"
方法三:1、或者你可以在服务器端变量赋值后在页面注册一段脚本
             "<script language='javascript'>var temp=" + tmp + "</script>"
             tmp是后台变量,然后js中可以直接访问temp获得值。

3.如何在C#中访问JavaScript的已有变量?

答案如下:

方法一:1、前台使用静态文本控件隐藏域,将js变量值写入其中;
          2、后台用request["id"]来获取值;

方法二:可以用cookie或session

4.如何在C#中访问JavaScript函数?
答案如下:
c#代码中执行javaScript函数:
方法一:1、Page.RegisterStartupScript("ggg","<script>SetVisible(1);</script>");
方法二:使用Literal类,然后
private void Button2_Click(object sender, System.EventArgs e)
{
string str;
str="<script language='javascript'>";
str+="selectRange()";
str+="</script>";
//Literal1.Visible=true;
Literal1.Text=str;
}

written by ocean

2月 26

ASP.NET操作

添加Cookies

Response.Cookies("userName").Value = "mike"
Response.Cookies("userName").Expires = DateTime.Now.AddDays(1)

读取Cookies

Request.Cookies("userName").Value

JavaScript操作

function setCookie(name,value)//两个参数,一个是cookie的名子,一个是值
{
    var Days = 30; //此 cookie 将被保存 30 天
    var exp = new Date();     //new Date("December 31, 9998");
    exp.setTime(exp.getTime() + Days*24*60*60*1000);
    document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}
function getCookie(name)//取cookies函数        
{
    var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
     if(arr != null) return unescape(arr[2]); return null;

}
function delCookie(name)//删除cookie
{
    var exp = new Date();
    exp.setTime(exp.getTime() – 1);
    var cval=getCookie(name);
    if(cval!=null) document.cookie= name + "="+cval+";expires="+exp.toGMTString();
}

//SetCookie ("xiaoqi", "3");
//alert(getCookie('xiaoqi'));
</script>

written by ocean

2月 26
<asp:TextBox ID="UserTel" runat="server" Width="149px"></asp:TextBox><input id="PhoneBinded" type="checkbox" onclick="return CheckMobileStatus();" />
 
function CheckMobileStatus()
{
    if(document.getElementById("PhoneBinded").checked==true)
      {
       var mobilenum = document.getElementById('<%=UserTel.ClientID%>').value;
        
       if (mobilenum==""||!isValidMobile(mobilenum)){
              alert("请输入有效的手机号!");        
              document.getElementById('<%=UserTel.ClientID%>').focus();
            return false;
         }
        
       var theUrl="InputTelNum.aspx?ID="+mobilenum;
         openWin(theUrl,"newwin","",280,150,"true");
     }
}

一个是服务器端的TextBox, 还有个是客户端的checkbox 当我们选中checkbox的时候 ,js来验证得到这个TextBox中的值,从而跳到指定的页面,这里我们使用了document.getElementById('<%UserTel.ClientID%>').value 来在javascript中获得服务器端控件中的值。

<asp:Button ID="btnDel" runat="server" Text=" 删 除 " OnClientClick="return CheckDel();" OnClick="btnDel_Click" />
 
function CheckDel()
{
    if(confirm("确定删除?"))
      {
        return true;
      }
    else
      {
        return false;
      }
}

这个是一个常用的删除按钮,通常我们在执行删除操作的时候,会先进行一个删除操作的提示,以进行是否确实要删除,一般服务器端按钮是先执行客户端的操作,然后在执行服务器端的btnDel_Click的操作.

written by ocean

2月 26

父调子

document.frames('testyingyan').document.getElementById("zhy").style.display='none';

子调父

alert(parent.s);

written by ocean

2月 26

<span style=’position:absolute;width:200;height:200;background:red’ onmousedown=MouseDown(this) onmousemove=MouseMove() onmouseup=MouseUp()>meizz</span>
<script language=javascript>
var Obj;
function MouseDown(obj)
{
   Obj=obj;
   Obj.setCapture();
   Obj.l=event.x-Obj.style.pixelLeft;
   Obj.t=event.y-Obj.style.pixelTop;
}
function MouseMove()
{
   if(Obj!=null)
   {
     Obj.style.left = event.x-Obj.l;
     Obj.style.top = event.y-Obj.t;
   }
}
function MouseUp()
{
   if(Obj!=null)
   {
     Obj.releaseCapture();
     Obj=null;
   }
}
</script>

written by ocean

2月 26

2000

<add key="provider" value="SQLOLEDB" />
<add key="connectionString"    value="server=loaclhost;database=db_ibatis;uid=sa;pwd=capslock" />

2005

<provider name="sqlServer2.0" />
<dataSource name="SqlServer" connectionString="data source=(local);database=NPetshop;user id=NPetshop;password=ibatisnet;" />

   今天为这个郁闷了小半天

written by ocean

2月 26

前台:  

      <asp:GridView ID="GridView1"
   
         runat="server"
AutoGenerateColumns="False" CellPadding="4"
                           ForeColor="#333333" GridLines="None"
           OnRowCancelingEdit="GridView1_RowCancelingEdit"
            OnRowDeleting="GridView1_RowDeleting"
            OnRowEditing="GridView1_RowEditing"
            OnRowUpdating="GridView1_RowUpdating" DataKeyNames="LogonID">
             <Columns>
                 <asp:BoundField DataField="LogonID" HeaderText="登陆ID" ReadOnly="True" />
                 <asp:BoundField DataField="Password" HeaderText="密码" />
                 <asp:BoundField DataField="Name" HeaderText="姓名" />
                 <asp:BoundField DataField="EmailAddress" HeaderText="电子邮件" />
                 <asp:CommandField HeaderText="选择" ShowSelectButton="True" />
                 <asp:CommandField HeaderText="编辑" ShowEditButton="True" />
                 <asp:CommandField HeaderText="删除" ShowDeleteButton="True" />
             </Columns>
           
             <RowStyle BackColor="#EFF3FB" />
                           <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
                           <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
                           <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
             <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
             <EditRowStyle BackColor="#2461BF" />
             <AlternatingRowStyle BackColor="White" />

           
         </asp:GridView>

后台:

     leiku dal = new leiku();
     protected void Page_Load(object sender, EventArgs e)
     {
         if (!Page.IsPostBack)
         {
             BindDataSource();
         }
     }

     void BindDataSource()
     {
         GridView1.DataSource = dal.GetList();
         GridView1.DataBind();
     }
     protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
     {
         dal.Delete(GridView1.DataKeys[e.RowIndex].Value.ToString());
         BindDataSource();
     }
     protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
     {
         GridView1.EditIndex = e.NewEditIndex;
         BindDataSource();

     }
     protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
     {
         string x1 = GridView1.DataKeys[e.RowIndex].Value.ToString();
         //string x1 = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[0].Controls[0])).Text.ToString().Trim();
         string x2 = "dsdds";
         //string x2 = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text;
             string x3=((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString().Trim() ;
             string x4=((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString().Trim() ;

             dal.Update(x1, x2, x3, x4);
             GridView1.EditIndex = -1;
         BindDataSource();
     }
     protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
     {
         GridView1.EditIndex = -1;
         BindDataSource();
     }

两点注意:

第一:设置DataKeyName

第二:判断回传,也就是Page.IsPostBack的判断

否则会出现问题

written by ocean