密码保护:测试加密日志

2008年10月25日 2:47 下午  |  分类:未分类

这是一篇受密码保护的文章。您需要提供访问密码:


ImageCropper For .Net

2008年10月20日 11:24 上午  |  分类:Develop

这是一个基于.Net的图片裁剪控件,使用比较广泛,如Gravatar中的头像上传与裁剪功能的实现。
当然Gravatar并不是用的这个控件。
今天在codeproject中无意发现的,觉得不错,拿来与大家分享一下。


裁剪后

基本参数:
MaintainAspectRatio,bool型,是否固定宽高比例进行裁剪。
CroppedImageHeight,int型,裁剪后的图片高
CroppedImageWidth,int型,裁剪后的图片宽
JpegQuality,int型,裁剪后的图片质量
裁剪时直接调用ImageCropper的Crop()方法即可。

下载地址:
http://www.uushare.com/user/yibin/file/899549

让.Net验证控件与自定义验证合作无间

2008年10月16日 2:33 下午  |  分类:Develop

场景:
一个注册表单,其间有.Net自带的验证控件,但有一些验证必须得借助于另外的一些js,如验证是否复选了注册协议(这里为了说明,只举这样一个简单的例子)。
这样的话,会涉及到二次验证,第一次可能是.Net验证控件的验证,第二次会认证用户有没有复选注册协议,如何让这二者合作无间呢?
这里不得不提到.Net的Page_ClientValidate()函数,该函数返回当前Page页中的表单有没有通过Validate的验证.

新建一个Page页面,简单的放一些控件

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button"
ValidationGroup="submit" CausesValidation="True"
onclick="Button1_Click" />
<input type="checkbox" id="checkbox" />我已阅读注册协议
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="TextBox1" Display="Dynamic" ErrorMessage="不能为空"
ValidationGroup="submit"></asp:RequiredFieldValidator>

页面呈现

TextBox留空,点击Button,会进行一次验证,当在TextBox中输入文本时,再点击提交,验证通过,引发OnClick事件,但用户是否复选了注册协议此处还未做判断。

此时需要我们手写验证函数了

<script type="text/javascript">
function test() {
var isCheck = document.getElementById('checkbox').checked;
if (isCheck) {
//Page_ClientValidate('submit'),这里有不同的ValidGroup,所以Page_ClientValidate传递是指定的GroupName
if (Page_ClientValidate('submit')) {
alert('验证成功');
return true;
}
}
else {
alert('您必须同意注册协议');
return false;
}

return false;
}
</script>

修改后的代码

<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" ValidationGroup="submit" CausesValidation="True"
OnClientClick="return test();" OnClick="Button1_Click" />
<input type="checkbox" id="checkbox" />我已阅读注册协议
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1"
Display="Dynamic" ErrorMessage="不能为空" ValidationGroup="submit"></asp:RequiredFieldValidator>

预览页面



到这里好像已经结束了,但查看html源代码会发现:

<input type="submit" name="Button1" value="Button"
onclick="return test();WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("Button1", "", true, "submit", "", false, false))" id="Button1" />

Button1除了有return test()外还有WebForm_DoPostBackWithOptions这样一段,很明显WebForm_DoPostBackWithOptions是不会被执行的,去掉这段也很简单,
将Button1的CausesValidation设为false即可。

当然,你也可以完全不用验证控件来实现。

用BeginGetResponse进行异步处理

2008年09月26日 9:20 下午  |  分类:Develop

在今天做的小项目中
用户登录成功后要访问另一个应用的一个url,只是get过去。
首先想到用HttpWebRequest去直接GetResponse()就OK了
但这里会有一个问题:如果另一个应用的响应时间过慢或网络响应过慢,直接会导致登录时会卡一下。
可以完全使用HttpWebRequest的异步方法获取响应

class HttpAsynGet
{
public HttpAsynGet(string url)
{
this.Url = url;
request = (HttpWebRequest)WebRequest.Create(Url);
}
public string Url
{
get;
set;
}
private HttpWebRequest request;
public HttpWebRequest Request
{
get
{
return request;
}
}
public void DO()
{
request.BeginGetResponse(ProcessResponse, this);
}
private void ProcessResponse(IAsyncResult ar)
{
HttpAsynGet item = (HttpAsynGet)ar.AsyncState;
using (HttpWebResponse response = (HttpWebResponse)item.request.EndGetResponse(ar))
{
if (response.StatusCode == HttpStatusCode.OK)
{
Console.WriteLine(response.ContentLength);
Console.WriteLine(new string('=', 20));
}
else
{
Console.WriteLine(response.StatusDescription);
}
this.request.Abort();
}
}
}

调用:
HttpAsynGet get = new HttpAsynGet("xxxxxx");
get.DO();
即可。
在.Net FrameWork的一些类中,只要有以Begin..../End....开头的方法说明该类的这些方法支持异步操作。