亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > ASP > 正文

分享:aspx頁面&#106avascript的幾個trick

2024-05-04 11:06:23
字體:
來源:轉載
供稿:網友
1、一般而言,如果想給aspx頁面上的web form control加上一些javascript的特性,可以用attributes.add來實現。
  例如,對textbox txt,可以:
txt.attributes.add("onclick", "fcn0();");
  那么,在web頁面上click它的時候,就會調用fcn0這個javascript函數。

1.1、例外的情況是,對于ide無法辨認的屬性的解析。

  比如對一個radiobutton rbt,ide不能辨認onclick這個屬性,那么,類似上面的語句,
rbt.attributes.add("onclick", "fcn1(this);");
在.net framework 1.1中,將解析成
<input type=radio id=rbt >...
而在在.net framework 1.0中,將解析成
<span ><input type=radio id=rbt>...</span>
注意到,fcn1中,參數this對應的對象就不同了。這是一個細微的差別。

2、而對于html control,需要多做一點事情。

  在設計aspx頁面的時候,從工具欄拖一個web form control,比如說,textbox到頁面,會發生兩件事:
    一、aspx頁面多一句
<asp:textbox id="textbox1" runat="server" width="102px" height="25px"></asp:textbox>
    二、code behind多一句
protected system.web.ui.webcontrols.textbox textbox1;
  如果是html control,那么,第一句中,runat="server"不會出現,而第二局不會被自動添加。
  因此,如果要訪問html control,需要
    一、aspx頁面的語句中添加runat="server"屬性,成為
<input type="text" size="9" id="htxt" runat="server">
    二、code behind中顯示的聲明
protected system.web.ui.htmlcontrols.htmlinputtext htxt;
  注意到第一句的id和第二句的變量名是相同的。

2.1、注意到,前面system.web.ui.webcontrols.textbox對應的html control是system.web.ui.htmlcontrols.htmlinputtext,對應的html的tag是<input type="text">,

相應的,html的tag <body>對應的html control是
public system.web.ui.htmlcontrols.htmlgenericcontrol mybody;

2.2、有一點例外的是html的<form> tag對應的onsubmit的事件??催@樣一個aspx頁面

<%@ page language="c#" codebehind="webform2.aspx.cs" autoeventwireup="false" inherits="testcs.webform2" %>
<!doctype html public "-//w3c//dtd html 4.0 transitional//en" >
<html>
  <head>
    <title>webform2</title>
    <meta name="generator" content="microsoft visual studio 7.0">
    <meta name="code_language" content="c#">
    <meta name="vs_defaultclientscript" content="javascript">
    <meta name="vs_targetschema" content="http://schemas.microsoft.com/intellisense/ie5">
    <script language="javascript">
    function fcn1()
    {
      prompt("hi", "fcn1");
    }
    </script>
  </head>
  <body ms_positioning="gridlayout">
    <form id="webform2" method="post" runat="server" onsubmit="fcn1();">
      <asp:button id="button1" runat="server" width="86px" height="29px" text="button"></asp:button>
      <asp:dropdownlist id="dropdownlist1" runat="server" width="188px" height="17px" autopostback="true">
        <asp:listitem value="a">a</asp:listitem>
        <asp:listitem value="b">b</asp:listitem>
        <asp:listitem value="c">c</asp:listitem>
      </asp:dropdownlist>
    </form>
  </body>
</html>

內容很簡單,定義了一個javascript函數fcn1,放了一個button button1和一個autopostback的dropdownlist dropdownlist1,運行它,可以看到:點擊button1,會先執行fcn1然后postback,而選擇dropdownlist1的不同選項,將只會postback,而不會觸發fcn1。

  微軟autopostback=true的webcontrol實現postback,原理是這樣的:

    一、如果此aspx頁面有autopostback=true的webcontrol,那么會寫下面一段javascript語句定義一個叫__dopostback的javascript函數。

<script language="javascript">
<!--
  function __dopostback(eventtarget, eventargument) {
    var theform;
    if (window.navigator.appname.tolowercase().indexof("netscape") > -1) {
      theform = document.forms["webform2"];
    }
    else {
      theform = document.webform2;
    }
    theform.__eventtarget.value = eventtarget.split("$").join(":");
    theform.__eventargument.value = eventargument;
    theform.submit();
  }
// -->
</script>

    二、例如是上面的dropdownlist,將會render成:
<select name="dropdownlist1" onchange="__dopostback('dropdownlist1','')" language="javascript" id="dropdownlist1" >
  <option value="a">a</option>
  <option value="b">b</option>
  <option value="c">c</option>
</select>

這樣,通過javscript調用theform.submit();來submit form,postback,但是,theform.submit將不會觸發form的onsubmit事件!

  這是微軟的一個bug。

  解決的方法可以看這里:http://www.devhawk.net/art_submitfirefixup.ashx,這里提供了一個dll及源代碼,使用的時候,在project的reference里加入這個dll,然后在web.config中加上一段
<httpmodules>
    <add type="devhawk.web.submitfirefixupmodule,submitfirefixupmodule" name="submitfirefixupmodule" />
</httpmodules>
就可以了。

3、一個應用。

  常常聽到抱怨,說如果在browser端用javascript改動了某個<select>元素,那么,它對應的server端的dropdownlist不能得知這個更新。

  這種情況可能出現在“級聯”的dropdownlist中,比如第一個dropdownlist是省份,第二個是城市;也可能出現在,從第一個dropdownlist選擇某些項加入到第二個dropdownlist中。

  對此使用以上的技術,我做了一個這樣的解決方案(類似于viewstate的方法):

    一、我定義了一個長寬都是0的textbox txtwrap,并把所有我想處理的dropdownlist都加上athososw="true" 這樣的屬性,準備處理。
    二、參照上面2.2的內容,我加入了submitfirefixupmodule,來保證觸發form的onsubmit事件。
    三、form的onsubmit事件將執行javascript函數fcnathosonsubmitwrap,它將遍歷athososw屬性為true的dropdownlist,記下數據,最后合并起來放到txtwrap里,其實這就是一個序列化的過程。代碼如下:
function fcnathosonsubmitwrap()
{
  txtwrap = document.all["txtwrap"];

  var i;
  var strwrap = '';
  for(i=0;i<document.all.length;i++)
  {
    ctrl = document.all[i];
    if(ctrl.tagname.touppercase() == 'select' && typeof(ctrl.athososw) != 'undefined' )
    {
      if(ctrl.athososw.touppercase() == 'true')
      {
        strwrap += fcnathoswrapselect(ctrl) + '&&&';
      }
    }
  }

  if(strwrap.length>3)
    txtwrap.value = strwrap.substring(0, strwrap.length-3);
};

//athososw 
function fcnathoswrapselect(ctrlselect)
{
  var i;
  var strwrapselect = ctrlselect.id + '&' + ctrlselect.tagname;
  var strvalue='';
  var strtext='';
  for(i=0;  i<ctrlselect.options.length;  i++)
  {
    strvalue = ctrlselect.options[i].value;
    strtext = ctrlselect.options[i].text;
    strwrapselect += '&&' + i + '&' + strvalue.replace(/&/g, '%26') + '&' + strtext.replace(/&/g, '%26');
  };
  return strwrapselect;
};


    四、form的page_load中調用clscommon.unwrapcontrol(this, txtwrap.text);來反序列化。clscommon是我的工具類,unwrapcontrol方法代碼如下:

static public void unwrapcontrol(system.web.ui.page pgunwrap, string strunwrap)
{
  regex r3 = new regex("(&&&)"); // split on hyphens.
  regex r2 = new regex("(&&)"); // split on hyphens.
  regex r1 = new regex("(&)"); // split on hyphens.
  string[] sa3, sa2, sa1;
  string s3, s2, s1;
  int i3, i2, i1;
  string strid, strtagname;
  system.web.ui.control ctrlunwrap;
  dropdownlist ddlunwrap;
  listitem liadd;

  s3 = strunwrap;
  sa3 = r3.split(s3);

  for(i3=0;i3<(sa3.length+1)/2;i3++)
  {
    s2 = sa3[i3*2];
    if(s2.length>0)
    {
      sa2 = r2.split(s2);
      if(sa2.length>1)
      {
        s1 = sa2[0];
        sa1 = r1.split(s1);
        if(sa1.length==3)
        {
          strid = sa1[0];
          strtagname = sa1[2];
         
          ctrlunwrap = pgunwrap.findcontrol(strid);
          if(ctrlunwrap !=null)
          {
            if(strtagname == "select")
            {
              ddlunwrap = (dropdownlist)ctrlunwrap;
              ddlunwrap.items.clear();

              for(i2=1; i2 < (sa2.length+1)/2;i2++)
              {
                s1 = sa2[i2*2];
                sa1 = r1.split(s1);
                liadd = new system.web.ui.webcontrols.listitem(sa1[4],sa1[2]);
                ddlunwrap.items.add(liadd);
              }
            }
          }
        }
      }
    }
  }
}


athossmth版權所有,轉載請注明。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国模精品视频一区二区| 国产精品久久一区主播| 日韩电影在线观看中文字幕| 九九精品在线观看| 日韩av综合网| 亚洲色图校园春色| 精品国产视频在线| 97超级碰在线看视频免费在线看| 欧美高清在线视频观看不卡| 欧美华人在线视频| 久久精视频免费在线久久完整在线看| 国产成人精品久久二区二区91| 欧美亚洲视频一区二区| 亚洲欧美视频在线| 亚洲精品456在线播放狼人| 国产精品爽黄69| 久久天天躁狠狠躁夜夜躁2014| 成人网址在线观看| 欧美中文在线免费| 日韩电影在线观看免费| 午夜精品久久久久久久白皮肤| 国产91色在线|免| 国产亚洲欧美日韩一区二区| 亚洲午夜性刺激影院| 日韩福利伦理影院免费| 日韩欧美中文字幕在线观看| 欧美黑人xxxⅹ高潮交| 精品久久久久久中文字幕大豆网| 98精品国产高清在线xxxx天堂| 九九热精品视频国产| 亚洲国产精品va在线观看黑人| 另类美女黄大片| 国内成人精品视频| 亚洲最新av在线网站| 国产精品久久久久久久久免费| 日韩电影中文字幕在线| 国产精品av网站| 亚洲第一免费网站| 欧美一区二区三区精品电影| 国产精品九九久久久久久久| 午夜免费日韩视频| 日韩在线激情视频| 在线亚洲国产精品网| 2019中文字幕在线免费观看| 午夜精品蜜臀一区二区三区免费| 国产视频在线一区二区| 成人黄色中文字幕| 在线性视频日韩欧美| 成人97在线观看视频| 日韩在线视频网| 欧美亚洲第一页| 成人久久一区二区| 日韩av在线直播| 久久久久久久久网站| 原创国产精品91| 成人美女免费网站视频| 国产97色在线|日韩| 欧美日韩国产综合新一区| 国产精品久久久久久久久久99| 136fldh精品导航福利| 久久久久久香蕉网| 久久精品久久久久电影| 中文字幕在线日韩| 欧美有码在线观看视频| 欧美人与性动交| 日韩精品福利在线| 中文字幕亚洲综合久久| 精品免费在线观看| 亚洲毛片一区二区| 在线观看国产欧美| 91免费版网站入口| 亚洲欧美国产制服动漫| 精品久久国产精品| 国产美女搞久久| 欧美精品久久一区二区| 欧美寡妇偷汉性猛交| 中日韩午夜理伦电影免费| 亚洲欧美制服丝袜| 中文字幕久热精品在线视频| 欧美大全免费观看电视剧大泉洋| 一夜七次郎国产精品亚洲| 国产精品亚洲一区二区三区| 亚洲精品美女在线观看播放| 91亚洲精品在线观看| 精品日韩视频在线观看| 欧美日韩国产成人在线| 国产精品三级在线| 久久久这里只有精品视频| 亚洲精品www久久久| 国产精品久久久久久久av大片| 欧美专区中文字幕| 日产精品99久久久久久| 国产精品91久久久久久| 亚洲成人黄色网| 中文字幕亚洲一区二区三区| 这里只有精品视频在线| 亚洲一区二区三区视频| 欧美精品电影免费在线观看| 欧美激情视频一区| 69精品小视频| 日本精品一区二区三区在线| 欧美日韩国产丝袜另类| 第一福利永久视频精品| 81精品国产乱码久久久久久| 国产精品∨欧美精品v日韩精品| 欧美一区深夜视频| 亚洲电影av在线| 日韩精品中文字| 国产精品精品视频| 日韩欧美极品在线观看| 国产成人免费av电影| 情事1991在线| 日韩精品电影网| 亚洲性生活视频在线观看| 91亚洲精华国产精华| 久久久国产成人精品| 亚洲最大福利视频网站| 成人在线免费观看视视频| 久久综合国产精品台湾中文娱乐网| 欧美丝袜第一区| 亚洲爱爱爱爱爱| 97国产精品视频| 日韩a**站在线观看| 欧美亚洲视频一区二区| 国产日产久久高清欧美一区| 成人中文字幕+乱码+中文字幕| 亚洲自拍偷拍视频| 国产精品激情自拍| 国模精品视频一区二区三区| 国产精品h在线观看| 亚洲欧美精品一区| 亚洲欧美综合精品久久成人| 欧美日本中文字幕| 国产z一区二区三区| 欧美日韩一区二区免费视频| 亚洲性夜色噜噜噜7777| 国产精品电影在线观看| 亚洲电影免费观看高清完整版| 色综合久久中文字幕综合网小说| 欧美激情第三页| 中文字幕亚洲综合| 久久精视频免费在线久久完整在线看| 欧美激情精品久久久| 欧美韩日一区二区| 日韩毛片中文字幕| 韩国三级电影久久久久久| 成人激情免费在线| 亚洲欧美日韩国产中文| 久久九九有精品国产23| 国产精品一区久久| 欧美激情三级免费| 欧美性视频在线| 亚洲欧洲美洲在线综合| 日韩亚洲在线观看| 国产大片精品免费永久看nba| 亚洲欧美一区二区三区久久| 538国产精品一区二区免费视频| 精品一区电影国产| 18性欧美xxxⅹ性满足| 欧美视频在线观看免费网址| 中文字幕欧美日韩在线| 97欧美精品一区二区三区| 欧美性色xo影院| 国产精品自产拍高潮在线观看|