11月 30

‍<%@ Page language="c#" Codebehind="DP_Admin_TuDou.aspx.cs" AutoEventWireup="true" Inherits="DianPing.Admin.Site.Obsolete.Admin_TuDou.DP_Admin_TuDou" %>

AutoEventWireup — 指示是否自动启用页事件。默认true,如果改为false,初始化的时候不执行pageload
Codebehind — 指示后台代码文件。

Inherits — 继承类

written by ocean

11月 26

在 javascript 中,可以使用 == 来比较两个数据是否相等,如果两个数据的类型不同,那么,将在进行转换后进行比较,转换的规则如下:

    如果其中一个操作数的类型为 Boolean ,那么,首先将它转换为数字类型,false 转换为 0, true 将转换为 1。

    如果其中一个操作数的类型是字符串,另外一个为数字类型,那么,将字符串转换为数字进行比较。

    如果其中一个操作数的类型是字符串,另外一个为 object 类型,那么,将调用对象的 toString 方法之后,比较字符串。

    如果其中一个操作数的类型是数字类型,另外一个为 object 类型,那么,将对象转换为数值后进行数字比较。

以下的规定了一些特殊的比较:

    null 和 undefined 是相等的。

    null 和 undefined 不会转换为任何其他类型

    如果任何一个操作的结果为 NaN,那么相等比较返回 false,不相等比较返回 true。注意,即使两个操作数都为 NaN,返回结果一样是 false,也就是说,NaN 不等于 NaN。

    如果两个操作数都是对象,那么比较它们引用的值,如果引用同一个对象,那么,返回真,否则,返回假。

alert(null == undefined);    // true

alert(undefined == null);    // true

alert(true == 1);    // true

alert(false == 0); // true

alert(true == 2);    // false

var obj = {};    

alert(10 == obj);    // false

完全相同的比较 === 和不完全相等 !==

完全相同的比较用来比较不进行转换是否相等,例如:

var a = "100";

var b = 100;

alert(a == b);       // true

alert(a === b);      // false

== 比较将返回真,因为 “100” 首先转换为数字 100, 然后与数字 100 进行比较,结果相等。

=== 比较将返回假,因为字符串 ”100” 不经过转换的话,与数字 100 不相等。

!== 用于比较在不转换的情况下,是否不相等。

alert(a != b);       // false

alert(a !== b);      // true

第一种情况将返回假,因为转换后是相等的。第二种情况将返回真,因为不经过转换的话,他们一个是字符串,一个是数字,是不相等的。

转帖地址:http://www.cnblogs.com/haogj/archive/2010/04/24/1719522.html

written by ocean

11月 24

自定义控件,要继承System.Web.UI.Control

如果要主动处理获取数据的回发,则要实现IPostBackDataHandler接口

该接口IPostBackDataHandler有两个方法

LoadPostData 当由某个类实现时,它为 ASP.NET 服务器控件处理回发数据。
RaisePostDataChangedEvent 当由类实现时,它用信号要求服务器控件对象通知 ASP.NET 应用程序该控件的状态已更改。

     [ToolboxData("<{0}:YsuhyTextBox id=’YsuhyTextBox’ runat=’server’></{0}:YsuhyTextBox>")]
    public class YsuhyTextBox : Control, IPostBackDataHandler //IPostBackDataHandler: 处理回发数据使用
    {
        public string Text
        {
            //Web编程中要用ViewState为两次回发共享数据
            get
            {
                String s = (String)ViewState["Text"];
                return ((s == null) ? String.Empty : s);
            }

            set
            {
                ViewState["Text"] = value;
            }
        }

        /**/
        /// <summary>
        /// 生成呈现Html格式标记
        /// </summary>
        /// <param name="writer"></param>
        protected override void Render(HtmlTextWriter writer)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("<input type=\"text\" name=");
            sb.Append("\"" + UniqueID + "\""); //标识符,继承自基类Control
            sb.Append("value=");
            //HttpUtility.HtmlEncode 将用户输入字串转换成Html格式,主要转义用户输入的html关键字为非html关键字字符
            sb.Append("\"" + HttpUtility.HtmlEncode(Text) + "\"");
            sb.Append(" />");
            writer.Write(sb.ToString());
        }

        /// <summary>
        ///
        /// </summary>
        /// <param name="postDataKey"></param>
        /// <param name="postCollection"></param>
        /// <returns></returns>
        public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
        {
            string strOldValue = Text;
            string strNewValue = postCollection[this.UniqueID];
            if (strOldValue == null || (strOldValue != null && !strOldValue.Equals(strNewValue)))
            {
                this.Text = strNewValue;
                return true;
            }
            return false;
        }

        public void RaisePostDataChangedEvent()
        {
            OnTextChanged(EventArgs.Empty);
        }

        public event EventHandler TextChanged;
        protected virtual void OnTextChanged(EventArgs e)
        {
            if (TextChanged != null)
            {
                TextChanged(this, e);
            }
        }
    }

添加工具箱之后就可以像TextBox一样的调用了

<form id="form1" runat="server">
    <div>
        <cc1:YsuhyTextBox ID=’YsuhyTextBox’ runat=’server’>
        </cc1:YsuhyTextBox>
        <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
   
    </div>
    </form>

结果


written by ocean

11月 24

方法1,

使用Response.Write,这种方法会把JS代码写在页面的最顶部(<html>的前面):
System.Web.HttpContext.Current.Response.Write("<script language=javascript>alert(‘JS代码’);</script>");

方法2,

使用RegisterStartupScript,这种方法会把JS代码嵌入在页面的底部、表单的最后 (</form>前面),适用于要在页面控件加载完成后运行的JS代码 :
System.Web.UI.Page page = (System.Web.UI.Page)System.Web.HttpContext.Current.Handler;
if (!page.ClientScript.IsStartupScriptRegistered(page.GetType(),"clientScript"))
    page.ClientScript.RegisterStartupScript(page.GetType(), "clientScript", "<script language=javascript>alert(‘JS代码’);</script>");

方法3,该方法不会产生页面左移

使用RegisterClientScriptBlock,这种方法会把JS代码嵌入在页面的顶部、表单的最前 (<form>后面),适用于要在控件加载前执行的JS代码,类似于上面的Response.Write方式 :
System.Web.UI.Page page = (System.Web.UI.Page)System.Web.HttpContext.Current.Handler;
if (!page.ClientScript.IsClientScriptBlockRegistered(page.GetType(),"clientScript"))
    page.ClientScript.RegisterClientScriptBlock(page.GetType(), "clientScript", "<script language=javascript>alert(‘JS代码’);</script>");

written by ocean

11月 17

100 Continue

指示客户端应该继续请求。回送用于通知客户端此次请求已经收到,并且没有被服务器拒绝。
客户端应该继续发送剩下的请求数据或者请求已经完成,或者忽略回送数据。服务器必须发送
最后的回送在请求之后。

101 Switching Protocols
服务器依照客服端请求,通过Upgrade头信息,改变当前连接的应用协议。服务器将根据Upgrade头立刻改变协议

在101回送以空行结束的时候。

Successful
=================================
200 OK
指示客服端的请求已经成功收到,解析,接受。

201 Created
请求已经完成并一个新的返回资源被创建。被创建的资源可能是一个URI资源,通常URI资源在Location头指定。回送应该包含一个实体数据
并且包含资源特性以及location通过用户或者用户代理来选择合适的方法。实体数据格式通过煤体类型来指定即content-type头。最开始服务器
必须创建指定的资源在返回201状态码之前。如果行为没有被立刻执行,服务器应该返回202。

202 Accepted
请求已经被接受用来处理。但是处理并没有完成。请求可能或者根本没有遵照执行,因为处理实际执行过程中可能被拒绝。

203 Non-Authoritative Information

204 No Content
服务器已经接受请求并且没必要返回实体数据,可能需要返回更新信息。回送可能包含新的或更新信息由entity-headers呈现。

205 Reset Content
服务器已经接受请求并且用户代理应该重新设置文档视图。

206 Partial Content
服务器已经接受请求GET请求资源的部分。请求必须包含一个Range头信息以指示获取范围可能必须包含If-Range头信息以成立请求条件。

Redirection
==================================
300 Multiple Choices
请求资源符合任何一个呈现方式。

301 Moved Permanently
请求的资源已经被赋予一个新的URI。

302 Found
通过不同的URI请求资源的临时文件。

303 See Other

304 Not Modified
如果客服端已经完成一个有条件的请求并且请求是允许的,但是这个文档并没有改变,服务器应该返回304状态码。304
状态码一定不能包含信息主体,从而通常通过一个头字段后的第一个空行结束。

305 Use Proxy
请求的资源必须通过代理(由Location字段指定)来访问。Location资源给出了代理的URI。

306 Unused

307 Temporary Redirect

Client Error
=====================
400 Bad Request
因为错误的语法导致服务器无法理解请求信息。

401 Unauthorized
如果请求需要用户验证。回送应该包含一个WWW-Authenticate头字段用来指明请求资源的权限。

402 Payment Required
保留状态码

403 Forbidden
服务器接受请求,但是被拒绝处理。

404 Not Found
服务器已经找到任何匹配Request-URI的资源。

405 Menthod Not Allowed
Request-Line请求的方法不被允许通过指定的URI。

406 Not Acceptable

407 Proxy Authentication Required

408 Reqeust Timeout
客服端没有提交任何请求在服务器等待处理时间内。

409 Conflict

410 Gone

411 Length Required
服务器拒绝接受请求在没有定义Content-Length字段的情况下。

412 Precondition Failed

413 Request Entity Too Large
服务器拒绝处理请求因为请求数据超过服务器能够处理的范围。服务器可能关闭当前连接来阻止客服端继续请求。

414 Request-URI Too Long
服务器拒绝服务当前请求因为URI的长度超过了服务器的解析范围。

415 Unsupported Media Type
服务器拒绝服务当前请求因为请求数据格式并不被请求的资源支持。

416 Request Range Not Satisfialbe

417 Expectation Failed

Server Error
===================================
500 Internal Server Error
服务器遭遇异常阻止了当前请求的执行

501 Not Implemented
服务器没有相应的执行动作来完成当前请求。

502 Bad Gateway

503 Service Unavailable
因为临时文件超载导致服务器不能处理当前请求。

504 Gateway Timeout

505 Http Version Not Supported

————————————————-

http://status-code.com/

  • 100 Continue
  • 101 Switching Protocols
  • 102 Processing
  • 200 OK
  • 201 Created
  • 202 Accepted
  • 203 Non-Authoritative Information
  • 204 No Content
  • 205 Reset Content
  • 206 Partial Content
  • 207 Multi-Status
  • 226 IM Used
  • 300 Multiple Choices
  • 301 Moved Permanently
  • 302 Found
  • 303 See Other
  • 304 Not Modified
  • 305 Use Proxy
  • 306 (Unused)
  • 307 Temporary Redirect
  • 400 Bad Request
  • 401 Unauthorized
  • 402 Payment Required
  • 403 Forbidden
  • 404 Not Found
  • 405 Method Not Allowed
  • 406 Not Acceptable
  • 407 Proxy Authentication Required
  • 408 Request Timeout
  • 409 Conflict
  • 410 Gone
  • 411 Length Required
  • 412 Precondition Failed
  • 413 Request Entity Too Large
  • 414 Request-URI Too Long
  • 415 Unsupported Media Type
  • 416 Requested Range Not Satisfiable
  • 417 Expectation Failed
  • 418 I’m a teapot
  • 422 Unprocessable Entity
  • 423 Locked
  • 424 Failed Dependency
  • 425 (Unordered Collection)
  • 426 Upgrade Required
  • 500 Internal Server Error
  • 501 Not Implemented
  • 502 Bad Gateway
  • 503 Service Unavailable
  • 504 Gateway Timeout
  • 505 HTTP Version Not Supported
  • 506 Variant Also Negotiates
  • 507 Insufficient Storage
  • 510 Not Extended
  • java HttpURLConnection提供的响应值为

    public static final int HTTP_OK = 200;


    public static final int HTTP_CREATED = 201;


    public static final int HTTP_ACCEPTED = 202;


    public static final int HTTP_NOT_AUTHORITATIVE = 203;


    public static final int HTTP_NO_CONTENT = 204;


    public static final int HTTP_RESET = 205;


    public static final int HTTP_PARTIAL = 206;


    public static final int HTTP_MULT_CHOICE = 300;


    public static final int HTTP_MOVED_PERM = 301;


    public static final int HTTP_MOVED_TEMP = 302;


    public static final int HTTP_SEE_OTHER = 303;


    public static final int HTTP_NOT_MODIFIED = 304;


    public static final int HTTP_USE_PROXY = 305;


    public static final int HTTP_BAD_REQUEST = 400;


    public static final int HTTP_UNAUTHORIZED = 401;


    public static final int HTTP_PAYMENT_REQUIRED = 402;


    public static final int HTTP_FORBIDDEN = 403;


    public static final int HTTP_NOT_FOUND = 404;


    public static final int HTTP_BAD_METHOD = 405;


    public static final int HTTP_NOT_ACCEPTABLE = 406;


    public static final int HTTP_PROXY_AUTH = 407;


    public static final int HTTP_CLIENT_TIMEOUT = 408;


    public static final int HTTP_CONFLICT = 409;


    public static final int HTTP_GONE = 410;


    public static final int HTTP_LENGTH_REQUIRED = 411;


    public static final int HTTP_PRECON_FAILED = 412;


    public static final int HTTP_ENTITY_TOO_LARGE = 413;


    public static final int HTTP_REQ_TOO_LONG = 414;


    public static final int HTTP_UNSUPPORTED_TYPE = 415;


    @Deprecated
    public static final int HTTP_SERVER_ERROR = 500;


    public static final int HTTP_INTERNAL_ERROR = 500;


    public static final int HTTP_NOT_IMPLEMENTED = 501;


    public static final int HTTP_BAD_GATEWAY = 502;


    public static final int HTTP_UNAVAILABLE = 503;


    public static final int HTTP_GATEWAY_TIMEOUT = 504;


    public static final int HTTP_VERSION = 505;

written by ocean

11月 16

异步调用加回调函数的小例子

        static void Main(string[] args)
        {
            //实例化委托并初赋值
            Func<int, string> func = delegate(int num)
            {
                Thread.Sleep(num);
                return "HelloWorld";
            };

            Console.WriteLine("异步开始");
            //异步开始
            //如果参数acb换成null则表示没有回调方法
            //最后一个参数dn的地方,可以换成任意对象,该对象可以被回调方法从参数中获取出来,写成null也可以。参数dn相当于该线程的ID,
            //如果有多个异步线程,可以都是null,但是绝对不能一样,不能是同一个object,否则异常
            IAsyncResult iar = func.BeginInvoke(1000, new AsyncCallback(delegate(IAsyncResult ar)
            {
                Console.WriteLine("我是异步的结果");
                //从异步状态ar.AsyncState中,获取委托对象
                Func<int, string> dn = (Func<int, string>)ar.AsyncState;
                //一定要EndInvoke,否则你的下场很惨
                string r = dn.EndInvoke(ar);
                Console.WriteLine(" 异步完成喽!r的值是" + r);
            }), func);
            //去做别的事
            //…………
            Console.WriteLine("异步结束");
            Console.Read();
        }

执行结果


written by ocean

11月 15

http://maps.google.com/maps?ll=31.390007,121.246599

written by ocean

11月 12

这两个方法是.net3.5里的关键字

主要用来创建委托,感觉跟Tuple差不多

记录一个例子,加强印象

如果没有这两个关键字,我们可能要这么写

private delegate string JiSuan(int a, int b);
public static void Main()
{
    JiSuan jsuan = new JiSuan(JiSuanFunction);
    Console.Write("计算结果:{0}", jsuan(3, 8));
}
private static string JiSuanFunction(int a,int b)
{
    return (a * b).ToString();
}

现在可以用简单的办法写了

public static void Main()
{
    Func<int, int, string> jsuan = new Func<int, int, string>(JiSuanFunction);
    Console.Write("计算结果:{0}", jsuan(3, 8));
}
private static string JiSuanFunction(int a,int b)
{
    return (a * b).ToString();
}

最后一个类型是返回值的类型

当然了,如果是空方法,没有返回值

那么就用Action了,嘿嘿 两个是一致的

这两个关键字都是最高能支持16个参数

例如

Func<T,TResult>

Func<T,T1,TResult>

Func<T,T1,T2,TResult>

Func<T,T1,T2,T3,TResult>

Func<T,T1,T2,T3,T4,TResult>

written by ocean

11月 11

异步委托,第一种,设置一个死循环等待完成

        static void Main(string[] args)
        {
            Func<string> func = WillInvokeMethod;
            AsyncResult myResult;    //此类封闭异步委托异步调用的结果,通过AsyncResult得到结果.
            myResult = (AsyncResult)func.BeginInvoke(null, null);         //开始调用 
            while (!myResult.IsCompleted) //判断线程是否执行完成
            {
                Thread.Sleep(300);
                Console.WriteLine("正在异步执行WillInvokeMethod.....");
            }
            Console.WriteLine("方法WillInvokeMethod执行完成!");
            string strEnd = func.EndInvoke(myResult);       //等待委托调用的方法完成,并返回结果 
            Console.WriteLine(strEnd);
            Console.Read(); 
        } 
        public static string WillInvokeMethod()
        {
            Thread.Sleep(1000);
            return "Hello Word";
        }

执行结果

正在异步执行WillInvokeMethod.....
正在异步执行WillInvokeMethod.....
正在异步执行WillInvokeMethod.....
正在异步执行WillInvokeMethod.....
方法WillInvokeMethod执行完成!
Hello Word

很显然,这个阻塞主线程的方式是如此的不够优雅,简直就是丑陋的代码!!! 

当然,我们可能就是需要创建非阻塞的异步委托,那么可以使用回调方法AsyncCallback

        static void Main(string[] args)
        {
            Func<string> func = () => {
                Thread.Sleep(1000);
                return "Hello Word";
            }; 
            IAsyncResult iar = func.BeginInvoke(new AsyncCallback(CompleteMethod), func);
            Console.WriteLine("end");
            Console.Read();
        }
      
        private static void CompleteMethod(IAsyncResult async)
        {
            AsyncResult ar = (AsyncResult)async; 
            Func<string> del = (Func<string>)ar.AsyncDelegate;
            string result = del.EndInvoke(async); 
            string mainTheadMsg = ar.AsyncState as string;
            Console.WriteLine("{0}Result is: {1}", mainTheadMsg, result);
        }

执行结果

end
Result is: Hello Word

 

written by ocean

11月 09

第一种,最基本的委托

    /// <summary>
    /// 定义委托
    /// </summary>
    /// <param name="x"></param>
    /// <param name="y"></param>
    /// <returns></returns>
    public delegate int CalculatorAdd(int x, int y); 
    class Program
    { 
        static void Main(string[] args)
        { 
            CalculatorAdd cAdd = new CalculatorAdd(Add);
            int result = cAdd.Invoke(5, 6); 
        } 
        public static int Add(int x, int y)
        {
            return x + y; 
        } 
    }

第二种,匿名方法

    public delegate int CalculatorAdd(int x, int y);
    class Program
    { 
        static void Main(string[] args)
        {
            CalculatorAdd cAdd = delegate(int x, int y) { return x + y; };
            int result = cAdd.Invoke(5, 6);
        } 
    }

第三种,Lambda表达式

    public delegate int CalculatorAdd(int x, int y);
    class Program
    { 
        static void Main(string[] args)
        {
            //方法一:
            CalculatorAdd cAdd1 = (int x, int y) => { return x + y; };
            int result1 = cAdd1(5, 6);

            //方法二:
            CalculatorAdd cAdd2 = (x, y) => { return x + y; };
            int result2 = cAdd2(5, 6);

            //方法三:
            CalculatorAdd cAdd3 = (x, y) => x + y;
            int result3 = cAdd2(5, 6);
        } 
    }

第四种,泛型委托

        static void Main(string[] args)
        {
            //方法一:
            Func<int, int, int> cAdd1 = (int x, int y) => { return x + y; };
            int result1 = cAdd1(5, 6);

            //方法二:
            Func<int, int, int> cAdd2 = (x, y) => { return x + y; };
            int result2 = cAdd2(5, 6);

            //方法三:
            Func<int, int, int> cAdd3 = (x, y) => x + y;
            int result3 = cAdd2(5, 6);
        }

第五种,异步委托

异步委托

最后再加一种,表达式树

            Expression<Func<int, int, int>> exp = (x, y) => x + y;
            Func<int, int, int> fun = exp.Compile();
            int result = fun(2, 3);

written by ocean