置顶随笔

posted @ 2008-05-13 16:08 丛林之王 阅读(5859) 评论(2) 编辑

2011年7月21日

 

<asp:DropDownList ID="DropDownList1" runat="server">
    <asp:ListItem Value="0" Selected="True">请选择</asp:ListItem>
    <asp:ListItem Value="1">你好</asp:ListItem>
    <asp:ListItem Value="2">请进</asp:ListItem>
    </asp:DropDownList>

1.通过text

var ddlgradelevel=document.getElementById("DropDownList1") ; 

            for (var i = 0; i < ddlgradelevel.options.length; i++) {
                if (ddlgradelevel.options[i].text == "你好") {
                    ddlgradelevel.options[i].selected = true;
                }
            }

 

2.通过value

document.getElementById("DropDownList1").value="1";

 

 

posted @ 2011-07-21 11:18 丛林之王 阅读(66) 评论(0) 编辑

2011年6月22日

2010-06-02 15:44:51|  分类: .net 阅读384 评论0   字号: 订阅

控制Asp.net的Button控件的提交动作

 

asp.net开发中,通常需要做一些客户端验证。当我们默认在一个页面中加个button控件时,这个Button被asp.net输出为一个Submit按钮。

<asp:Button ID="Button1"  runat="server"  Text="Button" onclick="Button1_Click" />

查看前台的HTML源码是:

<input type="submit" name="Button1" value="Button" id="Button1" />

Button 有一个OnClientClick属性,这个属性可以在提交的同时做一些提示,但是不能阻挡数据的回传。而我们需要的是在前台做一些验证,如果数据符合要 求,才允许提交到数据库。我们如果想要在Button控件提交前做一些验证的事情,就首先要Submit改成Button。对于这个改动,在 asp.net上是很简单的。只需要加上UseSubmitBehavior="false" 属性,这样submit就会变成button控件。

<asp:Button ID="Button1"  UseSubmitBehavior="false" runat="server"  Text="Button" onclick="Button1_Click" />

输出HTML源码:

<input type="button" name="Button1" value="Button" onclick="javascript:__doPostBack('Button1','')" id="Button1" />

这时候,asp.net提交不再是通过submit了,而是要首先经过一个_doPostBack的JS方法后,再提交,我们来看一下_doPostBack方法:


1: <script type="text/javascript"> 1:  2: //<![CDATA[ 3: var theForm = document.forms['form1']; 4: if (!theForm) { 5: theForm = document.form1; 6: } 7: function __doPostBack(eventTarget, eventArgument) { 8: if (!theForm.onsubmit || (theForm.onsubmit() != false)) { 9: theForm.__EVENTTARGET.value = eventTarget; 10: theForm.__EVENTARGUMENT.value = eventArgument; 11: theForm.submit(); 12: } 13: } 14: //]]></script>

 

在_doPostBack方法内,通过theForm.submit()来使数据提交到服务器。

这样很容易看出,如果我们想要在数据提交到服务器端前做些验证的事情,就要首先在_doPostBack之前做些处理,并使数据验证只有达到了要求 后,才可以调用_doPostBack使数据回传。我们首先给Button加一个 OnClientClick属性,给OnClientClick属性指定一个JS方法Test():

<asp:Button ID="Button1" OnClientClick="test();" UseSubmitBehavior="false" runat="server"  Text="Button" onclick="Button1_Click" />

JS代码如下:

1: function test() 2: { 3: alert("test"); 4: return false ; 5: }


 

再看一下经过服务端解析后输出的控件HTML代码:

<input type="button" name="Button1" value="Button" onclick="test();__doPostBack('Button1','')" id="Button1" />

我们看到test方法执行是在_doPostBack之前,当我们点按钮时,页面会弹出 test 警告,但是仍然会继续提交数据到服务器。如果不想提交数据到服务器,就要想办法阻止_doPostBack执行。到了这一步,解决办法就很明白了,我们只 需要把onclick变成 test();return;_dopostBack('Button1','')就可以了。如果需要test()方法的判断结果才决定是否提交数据到服 务器,我们需要这样改动 if(!test())return;_dopostBack('Button1','')。

打开aspx源代码,把OnClientClick改成OnClientClick= "if(!test())return; "我们再看一下HTML的输出:

<input type="button" name="Button1" value="Button" onclick="if(!test())return;__doPostBack('Button1','')" id="Button1" />

运行测试,满足要求。

这只是一种解决办法,还有就是重写Button,自己控制onclick的输出或者利用验证控件。

还有如下方式也可解决:

---------------------------------------------------------------------------------------------------------------

一个页面,有一个文本框和一个提交按钮,同时有一个验证控件来验证文本框中的输入,单击BUTTON时同时要触发一个javascript脚本。

在PageLoad中加入:Button1.Attribute.Add("onclick","return CheckOther()");

运行时提示发生脚本错误,缺少";"

生成的HTML:<input type="submit" name="btCheck" value=" 注 册 " onclick="return CheckAgree()if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); " language="javascript" id="btCheck" />
可以发现:CheckAgree()后的确是缺少了";"

改为:Button1.Attribute.Add("onclick","return CheckOther();");

运行时不提示脚本错误,但验证控件不起作用了。

生成的HTML:<input type="submit" name="btCheck" value=" 注 册 " onclick="return CheckAgree();if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); " language="javascript" id="btCheck" />
可以发现:onclick时调用完CheckAgree()函数直接就返回了,根本就没有调用验证脚本。

改为:Button1.Attribute.Add("onclick","if(Page_ClientValidate()) return CheckAgree();");

运行时不提示脚本错误,并且验证控件也起作用了,但是页面验证了两次

生成的HTML:<input type="submit" name="btCheck" value=" 注 册 " onclick="if(Page_ClientValidate()) return CheckAgree();if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); " language="javascript" id="btCheck" />
可以发现:在调用Checkgree()函数前先验证了一次页面,但如果页面没有通过验证,就会执行下面的if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate();又执行了一次验证。

改为:Button1.Attribute.Add("onclick","if(Page_ClientValidate()) {eturn CheckAgree();}else{return false;}");

问题解决

生成的HTML:<input type="submit" name="btCheck" value=" 注 册 " onclick="if(Page_ClientValidate()){return CheckAgree();}else{return false;}if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); " language="javascript" id="btCheck" />
不过可以看到if (typeof(Page_ClientValidate) == 'function') Page_ClientValidate(); 是垃圾代码,根本就不会执行

把Button1的CausesValidation设置为false,生成的HTML:
<input type="submit" name="btCheck" value=" 注 册 " id="btCheck" onclick="if(Page_ClientValidate()){return CheckAgree();}else{return false;}" />
可以看到,没有垃圾代码了。

但是我想先执行CheckAgree(),如果返回true再验证页面,就可以这样写:

Button1.Attribute.Add("onclick","return CheckAgree()");

function CheckAgree()
{
 if(!document.all["checkbox"].checked)
 {
 alert("如果继续注册,必须先同意协议!");
 return false;
 }
 else
 {
 if(Page_ClientValidate())
 {
 return true;
 }
 else
 {
 return false;
 }
 }
}

posted @ 2011-06-22 11:21 丛林之王 阅读(252) 评论(0) 编辑

2009年11月25日

俺反正是经常忘啊,用的时候总是翻箱倒柜的找也不是个事,把它们列在这里吧。

  • –b 当file存在并且是块文件时返回真
  • -c 当file存在并且是字符文件时返回真
  • -d 当pathname存在并且是一个目录时返回真
  • -e 当pathname指定的文件或目录存在时返回真
  • -f 当file存在并且是正规文件时返回真
  • -g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真
  • -h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效
  • -k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真
  • -p 当file存在并且是命令管道时返回为真
  • -r 当由pathname指定的文件或目录存在并且可读时返回为真
  • -s 当file存在文件大小大于0时返回真
  • -u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真
  • -w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。
  • -o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。

UNIX Shell 里面比较字符写法:

  • -eq 等于
  • -ne 不等于
  • -gt 大于
  • -lt 小于
  • -le 小于等于
  • -ge 大于等于
  • -z 空串
  • = 两个字符相等
  • != 两个字符不等
  • -n 非空串
posted @ 2009-11-25 17:54 丛林之王 阅读(128) 评论(0) 编辑

2008年5月14日

Response.Cookies["userName"].Value = "patrick";
Response.Cookies[
"userName"].Expires = DateTime.Now.AddDays(1);

HttpCookie aCookie 
= new HttpCookie("lastVisit");
aCookie.Value 
= DateTime.Now.ToString();
aCookie.Expires 
= DateTime.Now.AddDays(1);
Response.Cookies.Add(aCookie);

此示例向 Cookies 集合添加两个 Cookie,一个名为 userName,另一个名为 lastVisit。对于第一个 Cookie,Cookies 集合的值是直接设置的。可以通过这种方式向集合添加值,因为 Cookies 是从 NameObjectCollectionBase 类型的专用集合派生的。

对于第二个 Cookie,代码创建了一个 HttpCookie 类型的对象实例,设置其属性,然后通过 Add 方法将其添加到 Cookies 集合。在实例化 HttpCookie 对象时,必须将该 Cookie 的名称作为构造函数的一部分进行传递。

这两个示例都完成了同一任务,即向浏览器写入一个 Cookie。在这两种方法中,有效期值必须为 DateTime 类型。但是,lastVisited 值也是日期时间值。因为所有 Cookie 值都存储为字符串,因此,必须将日期时间值转换为 String。


多值

Response.Cookies["userInfo"]["userName"= "patrick";
Response.Cookies[
"userInfo"]["lastVisit"= DateTime.Now.ToString();
Response.Cookies[
"userInfo"].Expires = DateTime.Now.AddDays(1);

HttpCookie aCookie 
= new HttpCookie("userInfo");
aCookie.Values[
"userName"= "patrick";
aCookie.Values[
"lastVisit"= DateTime.Now.ToString();
aCookie.Expires 
= DateTime.Now.AddDays(1);
Response.Cookies.Add(aCookie);

 

读取 Cookie

浏览器向服务器发出请求时,会随请求一起发送该服务器的 Cookie。在 ASP.NET 应用程序中,可以使用 HttpRequest 对象读取 Cookie,该对象可用作 Page 类的 Request 属性使用。HttpRequest 对象的结构与 HttpResponse 对象的结构基本相同,因此,可以从 HttpRequest 对象中读取 Cookie,并且读取方式与将 Cookie 写入 HttpResponse 对象的方式基本相同。下面的代码示例演示两种方法,通过这两种方法可获取名为 username 的 Cookie 的值,并将其值显示在 Label 控件中:

if(Request.Cookies["userName"!= null)
    Label1.Text 
= Server.HtmlEncode(Request.Cookies["userName"].Value);

if(Request.Cookies["userName"!= null)
{
    HttpCookie aCookie 
= Request.Cookies["userName"];
    Label1.Text 
= Server.HtmlEncode(aCookie.Value);
}


在尝试获取 Cookie 的值之前,应确保该 Cookie 存在;如果该 Cookie 不存在,将会收到 NullReferenceException 异常。还请注意在页面中显示 Cookie 的内容前,先调用 HtmlEncode 方法对 Cookie 的内容进行编码。这样可以确保恶意用户没有向 Cookie 中添加可执行脚本。

读取 Cookie 中子键值的方法与设置该值的方法类似。下面的代码示例演示获取子键值的一种方法:

if(Request.Cookies["userInfo"!= null)
{
    Label1.Text 
= 
        Server.HtmlEncode(Request.Cookies[
"userInfo"]["userName"]);

    Label2.Text 
=
        Server.HtmlEncode(Request.Cookies[
"userInfo"]["lastVisit"]);
}


在上面的示例中,代码读取子键 lastVisit 的值,该值先前被设置为字符串表示形式的 DateTime 值。Cookie 将值存储为字符串,因此,如果要将 lastVisit 值作为日期使用,必须将其转换为适当的类型,如此示例所示:

DateTime dt;
dt 
= DateTime.Parse(Request.Cookies["userInfo"]["lastVisit"]);


Cookie 中的子键被类型化为 NameValueCollection 类型的集合。因此,获取单个子键的另一种方法是获取子键集合,然后再按名称提取子键值,如下面的示例所示:

if(Request.Cookies["userInfo"!= null)
{
    System.Collections.Specialized.NameValueCollection
        UserInfoCookieCollection;
       
    UserInfoCookieCollection 
= Request.Cookies["userInfo"].Values;
    Label1.Text 
= 
        Server.HtmlEncode(UserInfoCookieCollection[
"userName"]);
    Label2.Text 
=
        Server.HtmlEncode(UserInfoCookieCollection[
"lastVisit"]);
}

posted @ 2008-05-14 09:36 丛林之王 阅读(81) 评论(0) 编辑

2008年5月13日

一直以来对varchar和nvarchar不怎么了解,也听经理说过,他让我尽量用varchar,我说为什么啊,他说了一下,我不是太明白,哈哈!还是自己来找找吧!重网上找了别人的解释,感觉有点顿悟!!
1.
varchar[(n)]   
     长度为      n      个字节的可变长度且非      Unicode      的字符数据。n      必须是一个介于      1      和      8,000      之间的数值。存储大小为输入数据的字节的实际长度,而不是      n      个字节。所输入的数据字符长度可以为零。varchar      在      SQL-92      中的同义词为      char      varying      或      character      varying。   
    
     nvarchar(n)   
     包含      n      个字符的可变长度      Unicode      字符数据。n      的值必须介于      1      与      4,000      之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。nvarchar      在      SQL-92      中的同义词为      national      char      varying      和      national      character      varying。   

n 表示字符个数

nvarchar:   
     不管是一个字符还是一个汉字,都存为2个字节   
     varchar:   
     汉字是2个字节,其他字符存为1个字节   

通俗一點就是varchar適合輸入英文和數字,nvarchar一般用做中文或其它語言的輸入,這樣到別的語系不會出現亂碼:))

2.
N表示Unicode常量,可以解决多语言字符集之间的转换问题,见联机帮助

姓名,和房间通常都是用varchar这个数据类型  
   
  解释一下:  
  drop   proc   a  
   
  varchar(n):变长型字符数据类型,存储最长长度为8,000   个字符。  
   
  举个例子:  
  create   table   a   (name1   varchar(8))  
  insert   a   select   '张红a'      
          ---   存储长度为5个字节,余下的3个字节全部释放  
  insert   a   select   '王一南'  
          ----存储长度为6个字节,余下的2个字节全部释放  
  ---意思是varchar变长字符数据类型与存储数据的实际长度是一致的  
   
  nvarchar(n):可变长度   Unicode   数据,其最大长度为   4,000   字符。  
    字节的存储大小是所输入字符个数的两倍,  
  就是说它是双字节来存储数据的。  
  如果存储数据如果存在单字节时,它也是以双字节来占用存储空间的。  
   
  举个例子:  
  create   table   aa   (name1   nvarchar(8))  
  insert   aa   select   '张红a'      
          ---   存储长度为6个字节,余下的2个字节全部释放  

    谢谢二位了啊!
 
posted @ 2008-05-13 16:08 丛林之王 阅读(5859) 评论(2) 编辑

2008年4月25日

posted @ 2008-04-25 14:30 丛林之王 阅读(84) 评论(0) 编辑
posted @ 2008-04-25 14:24 丛林之王 阅读(85) 评论(0) 编辑

2008年4月22日

posted @ 2008-04-22 14:48 丛林之王 阅读(98) 评论(0) 编辑

公告

昵称:丛林之王
园龄:4年3个月
粉丝:0
关注:0

导航

<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

统计

  • 随笔 - 8
  • 文章 - 0
  • 评论 - 2
  • 引用 - 0

搜索

 
 

常用链接

随笔分类

随笔档案

asp.net技术

最新评论

阅读排行榜

评论排行榜

推荐排行榜