asp.net web开发综合技能

1.设置TextBox为只读
   大家在想将TextBox控件设置为只读还不容易吗?但如果你是用到Ajax在客户端改变控件的值,再在服务器获取,如果直接将Textbox设置为Enble 设置为false,那么在客户端改变了值,在服务器端还是获取不到。我开始开发的时候,还以为只读控件就直接用Lable控件就好,后来发现一样的在客户端能改变值,但在服务器端获取不到。唯一可行的是用下面的设置:
          textBox.Attributes["readonly"] = "readonly";
2.在服务器端控制Html控件的显示&隐藏
Code
/**//// <summary>
    
/// 在服务器端控制HTML控件的显示
    
/// </summary>
    
/// <param name="ClientID">Client ID</param>
    
/// <param name="Visible">true显示,false隐藏</param>
    
/// <param name="page"></param>

    public static void ShowCtrl(string ClientID, bool Visible,System.Web.UI.Page page)
    
{
      StringBuilder script 
= new StringBuilder();
      script.Append(
"<script language=javascript>");
     
//script .AppendFormat ("var v = eval('document.all.tabContent__' + idx);");
      script.AppendFormat("document.getElementById ('{0}').style.display='{1}';", ClientID, Visible ? "block" : "none");
      script.Append(
"</script");
      ClientScriptManager ScriptMag 
= page.ClientScript;

      
if (!ScriptMag.IsStartupScriptRegistered(page.GetType(), "showCtrl"))
      
{
        ScriptMag.RegisterStartupScript(page.GetType(), 
"showCtrl", script.ToString());
      }

    }


3.弹出新的窗口
   要想弹出一个新的窗口,1:是通过链接,设置target属性 为_blank 。
  2:是通过window.open
  我要说的不是通过链接来实现,通过window.open,可以通过    Response.Write 输出javascript脚本,但是这样输出的javascript在页面的最上面,更不好的是,这样输出后改变的页面的样式,字体设置的样式都随之改变,所以有问题。
  我解决的是通过ClientScriptManager.RegisterStartupScript注册起始运行脚本,这样生成的脚本在页面的最下面,不扰乱页面的结构。
   StringBuilder script = new StringBuilder();
      script.Append("<script language=javascript>");
      script.AppendFormat("window.open('text.aspx');");
      script.Append("</script");
     ClientScriptManager ScriptMag = page.ClientScript;
     if(!ScriptMag.IsStartupScriptRegistered (page .GetType() ,"print"))
      {
        ScriptMag.RegisterStartupScript (page.GetType() ,"text",script.ToString ());
      }

3在客户端访问服务器
   在客户端访问或提交数据到服务器端,总的来说就是通过javacript异步访问服务器。

   前提实现XMLHttpRequest,可以通过asp.net中的ajax,或JQuery中封装好了的ajax,或自己封装。例如:

    1.调用asp.net中ajax

在页面加入ScriptManger,如果是调用页面方法EnablePageMethods要设为true,如果访问webService设置webservice路径。

 

<asp:ScriptManager id = " AjaxMag "  runat = " server "  EnablePageMethods  = " true "   ScriptMode = " Release "   >
        <Services
> <asp:ServiceReference Path  = " ~/WebService/comm.asmx "  InlineScript = " true "   /> < / Services >
<
/ asp:ScriptManager >

  调用 Page Method

// xxx.aspx.cs页面定义
[System.Web.Services.WebMethod]
  
public   static   string [] GetList( string  key)
 {
   
return   new   string []{
     
" AAAAAAAAA " , " BBBBBBBB " , " CCCCCCC " , " DDDDDD "
   };
 }
// javascript 调用PathMethods
var  key  = " a " ;
var  x 
PageMethods.GetList(key,
function (result){
    
var  x ;
    document.write (
" list count: "   +  result.length  +   " <br/> " );
    
for  (x  in  result)
    {
     document.write (result[x] 
+ " <br/> " );
    }
};

调用WebService 中Methods

// Web Service定义
[WebService(Namespace  =   " http://tempuri.org/ " )]
[WebServiceBinding(ConformsTo 
=  WsiProfiles.BasicProfile1_1)]
// 加入此
[System.Web.Script.Services.ScriptService]
public   class  comm : System.Web.Services.WebService {

    
public  comm () {
    }

    [WebMethod]
    
public   string [] GetList( string  key) {
        
return   new   string  []{ " aaa " , " bbb " , " cc " };
    }
}

// javascript 访问web service
var  key = " A " ;
comm.GetList(key,
function (result){
          
var  x ;
          document.write (
" list count: "   +  result.length  +   " <br/> " );
          
for  (x  in  result)
          {
            document.write (result[x] 
+ " <br/> " );
          }
    });

 2.自定义XMLHttpRequest

var  xmlHttp;
var  viewModel;
// 建立异步处理对象
function  createXMLHttpRequest() {
    xmlHttp 
=   false ;
    
// 开始初始化XMLHttpRequest对象
     if (window.XMLHttpRequest) {  // Mozilla 浏览器
        xmlHttp  =   new  XMLHttpRequest();
        
if  (xmlHttp.overrideMimeType) { // 设置MiME类别
            xmlHttp.overrideMimeType( ' text/xml ' );
        }
    }
    
else   if  (window.ActiveXObject) {  //  IE浏览器
         try  {
            xmlHttp 
=   new  ActiveXObject( " Msxml2.XMLHTTP " );
        } 
catch  (e) {
            
try  {
                xmlHttp 
=   new  ActiveXObject( " Microsoft.XMLHTTP " );
            } 
catch  (e) {}}
        }
        
if  ( ! xmlHttp) {  //  异常,创建对象实例失败
            window.alert( " 不能创建XMLHttpRequest对象实例. " );
            
return   false ;
        }
}
function  AsynGet()
{
  createXMLHttpRequest();
  viewModel
= model;
  url
= " Handler.ashx?key=A " ;
  xmlHttp.open(
" GET " , url,  true );
  xmlHttp.onreadystatechange 
=  callback;
  xmlHttp.send(
null );
}
function  callback()
{
    
if  (xmlHttp.readyState  ==   4
    {     
        
if  (xmlHttp.status  ==   200
        {   
                  
var  result  =  xmlHttp.responseText;
                  document.getElementById(
" lblMsg " ).innerHTML = result
                  
var  arr  = result.split( ' , ' );
                  
var  x ;
                  
for  (x  in  arr)
                  {
                    document.write(arr[x] 
+   " <br /> " );
                  }
                }
        
else
        {
            
// 显示错误信息
        }
    }
}

 3.使用JQuery Ajax:

var  sendData = " key=A " ;
$.ajax({
      type: 
" POST " ,
      url:
" Handler.ashx " ,
      data:sendData,
      success:
function (result){
         $(
" #lblMsg " ).text(result);
         
var  arr  =  result.split( ' , ' );
         
var  x;
         
for  (x  in  arr)
         {
          document.write(arr[x] 
+   " <br/> " );
         }
      }
});

 所访问的Handler.ashx

<% @ WebHandler Language = " C# "  Class = " Handler "   %>
using  System;
using  System.Web;
public   class  Handler : IHttpHandler {
    
public   void  ProcessRequest (HttpContext context) {
        context.Response.ContentType 
=   " text/plain " ;
        context.Response.Write(
" AAA,BBB,CC " );
    }
    
public   bool  IsReusable {
        
get  {
            
return   false ;
        }
    }
}

 动态加载Javascript和CSS

 在Head中加Javascript和CSS  

     HtmlGenericControl script  =   new  HtmlGenericControl( " script " );
      script.Attributes[
" type " =   " text/javascript " ;
      script.Attributes[
" src " =   " comm.js " ;

      Page.Header.Controls.Add(script);


      HtmlGenericControl css 
=   new  HtmlGenericControl( " link " );
      css.Attributes[
" type " =   " text/css " ;
      css.Attributes[
" href " =   " style.css " ;
      css.Attributes[
" rel " =   " stylesheet " ;
      Page.Header.Controls.Add(css);

在页尾加Javascript
      
string  js  =   " <script type=\ " text / javascript\ "  src=\ " comm.js\ " ></script> " ;
      ClientScript.RegisterStartupScript(GetType(),
" js " ,js);

 Ajax防止乱码处理

 

 

代码
  < script type  = " text/javascript " >
    
    
function  OnClientAjax()
    {
      
var  value  = " 中文测试~!@#$%^&*()-+_`123/45 " ;
   
      $.ajax({
       type: 
" POST " ,
        url: 
" output.aspx " ,
        data: 
" value= "   +  urlEncode(escape(value)),
        success: 
function (msg){
           alert(msg);
       }
     });
    }
    
    
function  urlEncode(s) 
    {
     
return  s.replace( / \+ / g,  ' %2b ' ).replace( / \" / g, ' %22 ' ).replace( / \ // g,'%2f');
    }
   
    
< / script>

 

  

 

  protected   void  Page_Load( object  sender, EventArgs e)
    {
            
string  value  = Server.HtmlDecode (Request[ " Value " ]);

            Response.Write(value);
    }

 

 

 

你可能感兴趣的:(asp.net web开发综合技能)