通过后台事件直接调另一个页面的按钮事件,__EVENTVALIDATION,_VIEWSTATE
来源:互联网 发布:淘宝小二很忙系统很累 编辑:程序博客网 时间:2024/06/01 10:57
上几天做项目,需要将申请不合格的单子给提出来,作为内容重新发起一个新的流程。在此过程中,不需要打开页面,直接将数据保存到发起人草稿箱中。
那么在这过程中需要注意的是:
- 发起人信息这么样带过去
- 这么样调用该页面
- 数据如何保存
然后在网上找了一些demo,其中有一个是:
- 通过URL去请求页面get方式
- 将请求来的数据信息进行提取 ‘_**_VIEWSTATE**’,‘__EVENTVALIDATION’,视图状态,和按钮事件 (最后介绍一下__VIEWSTATE,__EVENTVALIDATION)
- 那么接下来需要post数据, Request request = new Request();将需要post的数据放在request.add(“key”,“value”)。例如: request.Add(“ctl00
contentPlace btnSave”, “保存草稿”);//为按钮的name名字 - 将第二步的数据当做数据源,添加到request .add中,然后post数据
具体代码:
protected void Button1_Click(object sender, EventArgs e) { // string url = "http://localhost:49857/test/WebForm6.aspx"; string url = "http://localhost:1876/Workflow/MTStart.aspx?processID=359&ApplicantUserId=A150017"; Request request = new Request(); request.Method = Method.POST; #region webForm6 //request.Add("ctl00$ContentPlaceHolder1$TextBox1", "name111"); //request.Add("ctl00$ContentPlaceHolder1$TextBox2", "name222"); //request.Add("ctl00$ContentPlaceHolder1$TextBox3", "name3333"); //request.Add("ctl00$ContentPlaceHolder1$Button1", "Butt11o22n"); #endregion HttpRRHelper html = new HttpRRHelper(); Response response = html.GetHTML(url,new WebProxy("172.27.1.250",80)); Match math = Regex.Match(response.Html, "<input type=\"hidden\" name=\"__VIEWSTATE\" id=\"__VIEWSTATE\" value=\"(?<val>.*?)\" />", RegexOptions.Singleline | RegexOptions.IgnoreCase); string value = math.Groups["val"].Value; request.Add("__VIEWSTATE", System.Web.HttpUtility.UrlEncode(value)); math = Regex.Match(response.Html, "<input type=\"hidden\" name=\"__EVENTVALIDATION\" id=\"__EVENTVALIDATION\" value=\"(?<val>.*?)\" />", RegexOptions.Singleline | RegexOptions.IgnoreCase); request.Add("__EVENTVALIDATION", System.Web.HttpUtility.UrlEncode(math.Groups["val"].Value)); request.Add("ctl00$contentPlace$btnSave", "保存草稿");//为按钮的name名字 // response = html.GetHTML(url, true, request, new WebProxy("172.27.1.250",80)); // OAS.Common.HttpRRHelper.Init().BeginGetHTML(url, true, request); response = html.GetHTML(url, true, request, new WebProxy("172.27.1.250", 80)); }
发送数据封装的方法,你可以把它作为新类使用:
namespace OAS.Common{ #region 发送方式 public enum Method { GET, POST } #endregion #region 返回内容 /// <summary> /// 返回内容 /// </summary> public class Response { #region 远程服务器时间 DateTime _RemoteDateTime = Convert.ToDateTime("1900-01-01 00:00:00.000"); /// <summary> /// 远程服务器时间 /// </summary> public DateTime RemoteDateTime { get { return _RemoteDateTime; } set { _RemoteDateTime = value; } } #endregion #region 返回内容 string html = string.Empty; /// <summary> /// 返回内容 /// </summary> public string Html { get { return html; } set { html = value; } } #endregion #region 返回的Cookies CookieContainer _Cookies = new CookieContainer(); /// <summary> /// 返回的Cookies /// </summary> public CookieContainer Cookies { get { return _Cookies; } set { _Cookies = value; } } #endregion #region HTTP状态代码 /// <summary> /// HTTP状态代码 /// </summary> public HttpStatusCode StatusCode { get; set; } #endregion #region 返回的图片内容 Image _Image = null; /// <summary> /// 返回的图片内容 /// </summary> public Image Image { get { return _Image; } set { _Image = value; } } #endregion #region 当前URL string _Url = string.Empty; /// <summary> /// 当前URL /// </summary> public string Url { get { return _Url; } set { _Url = value; } } #endregion } #endregion #region 发送数据 /// <summary> /// 发送数据 /// </summary> [Serializable] public class Request { List<KeyValuePair<string, string>> sList = new List<KeyValuePair<string, string>>(); Method _sendMethod = Method.GET; public Method Method { get { return _sendMethod; } set { _sendMethod = value; } } private CookieContainer _Cookies = new CookieContainer(); public CookieContainer Cookies { get { return this._Cookies; } set { this._Cookies = value; } } public void Clear() { this.sList.Clear(); } public void Add(string key, string value) { this.sList.Add(new KeyValuePair<string, string>(key, value)); } public void Update(string key, string value) { int index = -1; for (int i = 0; i < this.List.Count; i++) { if (this.List[i].Key.Equals(key)) { index = i; break; } } if (index > 0) this.List.RemoveAt(index); this.List.Add(new KeyValuePair<string, string>(key, value)); } public override string ToString() { string sRet = string.Empty; foreach (KeyValuePair<string, string> val in this.sList) { if (sRet.Length == 0) sRet = string.Format("{0}={1}", val.Key, val.Value); else sRet = string.Format("{0}&{1}={2}", sRet, val.Key, val.Value); } return sRet; } public byte[] ToBytes() { return Encoding.ASCII.GetBytes(this.ToString()); } public List<KeyValuePair<string, string>> List { set { this.sList = value; } get { return this.sList; } } public string Find(string key) { string sRet = string.Empty; KeyValuePair<string, string> val = this.List.Find(delegate(KeyValuePair<string, string> k) { return k.Key.Equals(key); }); sRet = val.Value; return sRet; } } #endregion public class HttpRRHelper { #region Static Field private static readonly string DefaultUserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)"; #endregion Static Field public static HttpRRHelper Init() { return new HttpRRHelper(); } #region Cookies CookieContainer _Cookies = new CookieContainer(); /// <summary> /// Cookies /// </summary> public CookieContainer Cookies { get { return _Cookies; } set { _Cookies = value; } } #endregion #region 连接远程服务器超时触发事件 public delegate void Connection_TimeOut_Handle(string sUrl, Request request, Exception ex); /// <summary> /// 连接远程服务器超时触发事件 /// </summary> public event Connection_TimeOut_Handle Connection_TimeOut; #endregion #region 获取数据完毕触发事件 public delegate void Connection_Complete_Handle(Response response); /// <summary> /// 获取数据完毕触发事件 /// </summary> public event Connection_Complete_Handle Connection_Complete; #endregion #region 设置发送头信息 /// <summary> /// 设置发送头信息 /// </summary> /// <param name="request"></param> private void SetRequestHeader(ref HttpWebRequest request, string referer) { request.Timeout = 5000; request.Accept = "*/*"; request.UserAgent = DefaultUserAgent;//"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 2.0.50727;)"; request.Headers["Accept-Encoding"] = "gzip, deflate"; request.Headers["Accept-Language"] = "zh-cn"; request.Headers["Accept-Charset"] = "utf-8;q=0.7,*;q=0.7"; request.ContentType = "application/x-www-form-urlencoded"; request.Referer = referer; request.KeepAlive = true; } #endregion #region 解压经过Gzip压缩的流 /// <summary> /// 解压经过Gzip压缩的流 /// </summary> /// <param name="contentEncoding">流编码</param> /// <param name="resonseStream">网页返回的流内容</param> /// <returns></returns> private string GzipStreame(string ecoding, Stream resonseStream) { return GzipStreame(ecoding, resonseStream, Encoding.UTF8); } private string GzipStreame(string ecoding, Stream resonseStream, Encoding coding) { string html = string.Empty; if (ecoding.ToLower().IndexOf("gzip") != -1) { html = new StreamReader(new GZipStream(resonseStream, CompressionMode.Decompress), coding).ReadToEnd(); } else if (ecoding.ToLower().IndexOf("deflate") >= 0) { html = new StreamReader(new DeflateStream(resonseStream, CompressionMode.Decompress), coding).ReadToEnd(); } else { html = new StreamReader(resonseStream, coding).ReadToEnd(); } return html; } #endregion #region 获取远程HTML /// <summary> /// 获取远程HTML /// </summary> /// <param name="url">地址</param> /// <returns></returns> public Response GetHTML(string url) { return GetHTML(url, false, new Request(), new Uri(url).Host, Encoding.UTF8, null); } public Response GetHTML(string url, WebProxy proxy) { return GetHTML(url, false, new Request(), new Uri(url).Host, Encoding.UTF8, proxy); } public Response GetHTML(string url, Encoding coding) { return GetHTML(url, false, new Request(), new Uri(url).Host, coding, null); } public Response GetHTML(string url, Encoding coding, WebProxy proxy) { return GetHTML(url, false, new Request(), new Uri(url).Host, coding, proxy); } /// <summary> /// 获取远程HTML /// </summary> /// <param name="url">地址</param> /// <param name="send">是否自动重定向URL</param> /// <returns></returns> public Response GetHTML(string url, bool bAllowAutoRedirect) { return GetHTML(url, bAllowAutoRedirect, new Request() { }, new Uri(url).Host, Encoding.UTF8, null); } public Response GetHTML(string url, bool bAllowAutoRedirect, WebProxy porxy) { return GetHTML(url, bAllowAutoRedirect, new Request() { }, new Uri(url).Host, Encoding.UTF8, porxy); } /// <summary> /// 获取远程HTML /// </summary> /// <param name="sUrl">地址</param> /// <param name="send">发送内容</param> /// <returns></returns> public Response GetHTML(string url, Request request) { return GetHTML(url, request, Encoding.UTF8); } public Response GetHTML(string url, Request request, WebProxy porxy) { return GetHTML(url, false, request, new Uri(url).Host, Encoding.UTF8, porxy); } public Response GetHTML(string url, bool bAllowAutoRedirect, Request request) { return GetHTML(url, bAllowAutoRedirect, request, new Uri(url).Host, Encoding.UTF8, null); } public Response GetHTML(string url, bool bAllowAutoRedirect, Request request, WebProxy proxy) { return GetHTML(url, bAllowAutoRedirect, request, new Uri(url).Host, Encoding.UTF8, proxy); } public Response GetHTML(string url, Request request, Encoding coding) { return GetHTML(url, false, request, new Uri(url).Host, coding, null); } public Response GetHTML(string url, Request request, Encoding coding, WebProxy proxy) { return GetHTML(url, false, request, new Uri(url).Host, coding, proxy); } /// <summary> /// 获取远程HTML /// </summary> /// <param name="sUrl">地址</param> /// <param name="bAllowAutoRedirect">是否自动跳转</param> /// <param name="send">发送内容</param> /// <returns></returns> public Response GetHTML(string sUrl, bool bAllowAutoRedirect, Request request, string referer) { return GetHTML(sUrl, bAllowAutoRedirect, request, referer, Encoding.UTF8, null); } public Response GetHTML(string sUrl, bool bAllowAutoRedirect, Request request, string referer, WebProxy proxy) { return GetHTML(sUrl, bAllowAutoRedirect, request, referer, Encoding.UTF8, proxy); } /// <summary> /// 获取HTML页面内容 /// </summary> /// <param name="url">地址</param> /// <param name="bAllowAutoRedirect">是否自动跳转</param> /// <param name="request">查询信息</param> /// <param name="referer">引用页</param> /// <param name="coding">编码格式</param> /// <returns></returns> public Response GetHTML(string url, bool bAllowAutoRedirect, Request request, string referer, Encoding coding, WebProxy proxy) { Response result = new Response(); //if (request.Method == Method.GET) //{ // string sData = request.ToString(); // if (sData.Length > 0) url = string.Format("{0}?{1}", url, sData); //} HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(url); if (proxy != null) httpRequest.Proxy = proxy; #region SSL方式 if (url.Contains("https://")) { //这一句一定要写在创建连接的前面。使用回调的方法进行证书验证。 ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult); //创建证书文件 X509Certificate objx509 = new X509Certificate(); //添加到请求里 httpRequest.ClientCertificates.Add(objx509); } #endregion // 设置发送头信息 if (referer.Length == 0) SetRequestHeader(ref httpRequest, new Uri(url).Host); else SetRequestHeader(ref httpRequest, referer); // 自动重定向 httpRequest.AllowAutoRedirect = bAllowAutoRedirect; httpRequest.Timeout = 60 * 1000; // 关联Cookies //if (httpRequest.CookieContainer == null) // httpRequest.CookieContainer = new CookieContainer(); httpRequest.CookieContainer = this.Cookies; try { if (request.Method == Method.POST) { // 设置发送方式 httpRequest.Method = request.Method.ToString(); // 获取发送数据流 //HttpWebResponse response = httpRequest.GetResponse() as HttpWebResponse; Stream strem = httpRequest.GetRequestStream(); // 写入发送数据 byte[] bs = request.ToBytes(); strem.Write(bs, 0, bs.Length); strem.Close(); } #region 添加授权 //2017/05-10 NetworkCredential d = new NetworkCredential("A150018", "936");//添加此代码 httpRequest.Credentials = d; #endregion HttpWebResponse httpResponse = httpRequest.GetResponse() as HttpWebResponse; Stream responseStream = httpResponse.GetResponseStream(); StreamReader sr = new StreamReader(responseStream, coding); //result.Html = sr.ReadToEnd(); result.Html = System.Web.HttpUtility.HtmlDecode(GzipStreame(httpResponse.ContentEncoding, responseStream, coding)); result.RemoteDateTime = Convert.ToDateTime(httpResponse.GetResponseHeader("Date")); result.Url = httpResponse.ResponseUri.OriginalString; this.Cookies.Add(httpResponse.Cookies); result.Cookies = this.Cookies; result.StatusCode = httpResponse.StatusCode; responseStream.Dispose(); if (this.Connection_Complete != null) this.Connection_Complete.Invoke(result); } catch (Exception ex) { if (this.Connection_TimeOut != null) this.Connection_TimeOut.Invoke(url, request, ex); } return result; } private bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; } #endregion #region 获取远程图片 public Response GetImage(string sUrl) { return GetImage(sUrl, false, new Request()); } public Response GetImage(string sUrl, WebProxy proxy) { return GetImage(sUrl, false, new Request(), proxy); } public Response GetImage(string sUrl, string referer) { return GetImage(sUrl, false, referer, null); } public Response GetImage(string sUrl, string referer, WebProxy proxy) { return GetImage(sUrl, false, referer, proxy); } public Response GetImage(string sUrl, bool bAllowAutoRedirect, string referer) { return GetImage(sUrl, bAllowAutoRedirect, new Request(), referer, null); } public Response GetImage(string sUrl, bool bAllowAutoRedirect, string referer, WebProxy proxy) { return GetImage(sUrl, bAllowAutoRedirect, new Request(), referer, null); } //public Image GetImage(string sUrl, bool bAllowAutoRedirect, Request request) //{ // return GetImage(sUrl, bAllowAutoRedirect, request, new CookieContainer(), ""); ////} //public Image GetImage(string sUrl, bool bAllowAutoRedirect, Request request, string referer) //{ // return GetImage(sUrl, bAllowAutoRedirect, request,referer); //} /// <summary> /// 获取远程图片 /// </summary> /// <param name="sUrl">图片地址</param> /// <param name="bAllowAutoRedirect">是否自动跳转</param> /// <param name="send">发送内容</param> /// <returns></returns> public Response GetImage(string sUrl, bool bAllowAutoRedirect, Request request) { return GetImage(sUrl, bAllowAutoRedirect, request, "", null); } public Response GetImage(string sUrl, bool bAllowAutoRedirect, Request request, string referer) { return GetImage(sUrl, bAllowAutoRedirect, request, referer, null); } public Response GetImage(string sUrl, bool bAllowAutoRedirect, Request request, WebProxy proxy) { return GetImage(sUrl, bAllowAutoRedirect, request, "", proxy); } /// <summary> /// 获取远程图片 /// </summary> /// <param name="sUrl">图片地址</param> /// <param name="bAllowAutoRedirect">是否自动跳转</param> /// <param name="send">发送内容</param> /// <returns></returns> public Response GetImage(string url, bool bAllowAutoRedirect, Request request, string referer, WebProxy proxy) { Response response = new Response(); if (request.Method == Method.GET) { string sData = request.ToString(); if (sData.Length > 0) url = string.Format("{0}?{1}", url, sData); } HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(url); if (proxy != null) httpRequest.Proxy = proxy; #region SSL方式 if (url.Contains("https://")) { //这一句一定要写在创建连接的前面。使用回调的方法进行证书验证。 ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(CheckValidationResult); //创建证书文件 X509Certificate objx509 = new X509Certificate(); //添加到请求里 httpRequest.ClientCertificates.Add(objx509); } #endregion // 设置发送头信息 if (referer.Length == 0) SetRequestHeader(ref httpRequest, new Uri(url).Host); else SetRequestHeader(ref httpRequest, referer); // 自动重定向 httpRequest.AllowAutoRedirect = bAllowAutoRedirect; // 关联Cookies httpRequest.CookieContainer = this.Cookies; try { if (request.Method == Method.POST) { // 设置发送方式 httpRequest.Method = request.Method.ToString(); // 获取发送数据流 //HttpWebResponse response = httpRequest.GetResponse() as HttpWebResponse; Stream strem = httpRequest.GetRequestStream(); // 写入发送数据 byte[] bs = request.ToBytes(); strem.Write(bs, 0, bs.Length); strem.Close(); } HttpWebResponse httpResponse = httpRequest.GetResponse() as HttpWebResponse; Stream responseStream = httpResponse.GetResponseStream(); //if (responseStream.CanSeek) //{ //response.Image = Image.FromStream(responseStream); //} //else //{ // response.Image = null; //} response.RemoteDateTime = Convert.ToDateTime(httpResponse.GetResponseHeader("Date")); this.Cookies.Add(httpResponse.Cookies); response.Cookies = this.Cookies; response.StatusCode = httpResponse.StatusCode; responseStream.Dispose(); responseStream.Close(); } catch (Exception ex) { if (this.Connection_TimeOut != null) this.Connection_TimeOut.Invoke(url, request, ex); } return response; } #endregion #region 异步获取远程HTML /// <summary> /// 异步获取远程HTML /// </summary> /// <param name="sUrl">地址</param> /// <returns></returns> public void BeginGetHTML(string sUrl) { BeginGetHTML(sUrl, false, new Request() { }); } /// <summary> /// 异步获取远程HTML /// </summary> /// <param name="sUrl">地址</param> /// <param name="send">是否自动重定向URL</param> /// <returns></returns> public void BeginGetHTML(string sUrl, bool bAllowAutoRedirect) { BeginGetHTML(sUrl, bAllowAutoRedirect, new Request() { }); } /// <summary> /// 异步获取远程HTML /// </summary> /// <param name="sUrl">地址</param> /// <param name="send">发送内容</param> /// <returns></returns> public void BeginGetHTML(string sUrl, Request request) { BeginGetHTML(sUrl, false, request); } /// <summary> /// 异步获取远程HTML /// </summary> /// <param name="sUrl">地址</param> /// <param name="bAllowAutoRedirect">是否自动跳转</param> /// <param name="send">发送内容</param> /// <returns></returns> public void BeginGetHTML(string sUrl, bool bAllowAutoRedirect, Request request) { Response result = new Response(); if (request.Method == Method.GET) { string sData = request.ToString(); if (sData.Length > 0) sUrl = string.Format("{0}?{1}", sUrl, sData); } HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(sUrl); #region 添加授权 //2017/05-10 NetworkCredential d = new NetworkCredential("A150028", "936");//添加此代码 httpRequest.Credentials = d; #endregion // 设置发送头信息 SetRequestHeader(ref httpRequest, new Uri(sUrl).Host); // 自动重定向 httpRequest.AllowAutoRedirect = bAllowAutoRedirect; if (request.Method == Method.POST) { // 设置发送方式 httpRequest.Method = request.Method.ToString(); // 获取发送数据流 Stream stream = httpRequest.GetRequestStream(); byte[] bs = request.ToBytes(); stream.Write(bs, 0, bs.Length); stream.Close(); //httpRequest.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback),httpRequest); // 写入发送数据 } //HttpWebResponse httpResponse = httpRequest.GetResponse() as HttpWebResponse; AsyncCallback callback = new AsyncCallback(GetResponseStreamCallback); try { httpRequest.BeginGetResponse(callback, httpRequest); } catch (WebException ex) { if (this.Connection_TimeOut != null) this.Connection_TimeOut.Invoke(sUrl, request, ex); } } private void GetRequestStreamCallback(IAsyncResult ar) { //Request request = ar.AsyncState as Request; //Stream stream = async.EndGetRequestStream(ar); //byte[] bs = request.ToBytes(); //stream.Write(bs, 0, bs.Length); //stream.Close(); } private void GetResponseStreamCallback(IAsyncResult ar) { HttpWebRequest httpRequest = ar.AsyncState as HttpWebRequest; #region 添加授权 //2017/05-10 NetworkCredential d = new NetworkCredential("A150027", "936");//添加此代码 httpRequest.Credentials = d; #endregion HttpWebResponse httpResponse = httpRequest.EndGetResponse(ar) as HttpWebResponse; Stream responseStream = httpResponse.GetResponseStream(); Response response = new Response(); response.Html = GzipStreame(httpResponse.ContentEncoding, responseStream); response.RemoteDateTime = Convert.ToDateTime(httpResponse.GetResponseHeader("Date")); //response.Cookies = httpResponse.Cookies; if (this.Connection_Complete != null) this.Connection_Complete.Invoke(response); } #endregion }}
完美解决
__VIEWSTATE
ViewState是ASP.NET中用来保存WEB控件回传时状态值一种机制。在WEB窗体(FORM)的设置为runat=”server”,这个窗体(FORM)会被附加一个隐藏的属性_VIEWSTATE。_VIEWSTATE中存放了所有控件在ViewState中的状态值。
ViewState是类Control中的一个域,其他所有控件通过继承Control来获得了ViewState功能。它的类型是system.Web.UI.StateBag,一个名称/值的对象集合。
当请求某个页面时,ASP.NET把所有控件的状态序列化成一个字符串,然后做为窗体的隐藏属性送到客户端。当客户端把页面回传时,ASP.NET分析回传的窗体属性,并赋给控件对应的值
_EVENTVALIDATION
__EVENTVALIDATION只是用来验证事件是否从合法的页面发送,只是一个数字签名,所以一般很短。
“id”属性为“__EVENTVALIDATION”的隐藏字段是ASP.NET 2.0的新增的安全措施。该功能可以阻止由潜在的恶意用户从浏览器端发送的未经授权的请求.
为了确保每个回发和回调事件来自于所期望的用户界面元素,ASP.NET运行库将在事件中添加额外的验证层。服务器端通过检验表单提交请求的内容,将其与“id”属性为“__EVENTVALIDATION”隐藏字段中的信息进行匹配。根据匹配结果来验证未在浏览器端添加额外的输入字段(有可能为用户在浏览器端恶意添加的字段),并且该值是在服务器已知的列表中选择的。ASP.NET运行库将在生成期间创建事件验证字段,而这是最不可能获取该信息的时刻。像视图状态一样,事件验证字段包含散列值以防止发生浏览器端篡改。
说明:“id”属性为“__EVENTVALIDATION”隐藏字段一般在表单的最下方,如果表单在浏览器端尚未解析完毕时,用户提交数据有可能导致验证失败。
0 0
- 通过后台事件直接调另一个页面的按钮事件,__EVENTVALIDATION,_VIEWSTATE
- 如何通过按钮触发事件由一个jsp页面转到另一个jsp页面
- 巧用AS3的事件机制:如何用一个按钮去触发另一个按钮的点击事件
- C#如何在一个按钮事件中调用另一个按钮的事件代码
- javaweb当中通过点击一个按钮来触发事件进行制定页面的跳转操作
- 通过PostMessage执行按钮事件
- Asp.net 中按钮的前台和后台事件
- 键盘响应页面按钮事件
- 以编程的方式在一个按钮的Click事件中调用另一个按钮的Click事件
- 通过一个控件的KeyPress事件调用另一个控件的Click事件
- 如何直接通过jquery为获取的对象添加事件?
- JavaScript点击事件-一个按钮触发另一个按钮
- ASP.NET后台代码方式识别页面“按钮点击”和浏览器F5“刷新”事件
- ASP.NET后台代码方式识别页面“按钮点击”和浏览器F5“刷新”事件
- js调用后台函数或按钮事件
- js调用后台函数或按钮事件
- 使用JS阻止按钮后台Click事件
- js调用后台函数或按钮事件
- JEECG使用心得
- oracle、mysql和SqlServer的一些常用函数对比(1)
- 点击获取当前时间
- Activity中Viewpager+Fragment,getActivity() 报错
- 如何看安卓代码
- 通过后台事件直接调另一个页面的按钮事件,__EVENTVALIDATION,_VIEWSTATE
- 真机调试adb连接失败
- DOM模型演示---增删改查中的增
- CSS样式覆盖规则
- HDU2001 计算两点之间的距离
- 深度学习(一)K-means特征学习
- fast marching method 计算内波相速度
- [leetcode]274. H-Index
- 反射2-继续上篇