代码改变世界

asp.net web开发综合技能

2008-03-17 20:26  ruinet  阅读(872)  评论(0编辑  收藏  举报
1.设置TextBox为只读
   大家在想将TextBox控件设置为只读还不容易吗?但如果你是用到Ajax在客户端改变控件的值,再在服务器获取,如果直接将Textbox设置为Enble 设置为false,那么在客户端改变了值,在服务器端还是获取不到。我开始开发的时候,还以为只读控件就直接用Lable控件就好,后来发现一样的在客户端能改变值,但在服务器端获取不到。唯一可行的是用下面的设置:
          textBox.Attributes["readonly"] = "readonly";
2.在服务器端控制Html控件的显示&隐藏
Code


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);
    }

 

 

 


free web counter