上一篇:数据表单向导的快速实现 >>
Posting form data from ASP.NET page to another URL
source:
http://www.c-sharpcorner.com/Code/2004/Sept/ASP.NetPostURL.asp
begin:
AuthorDate Of SubmissionUser LevelJigar Desai09/27/2004Intermediate
Download: Remote Post 2Kb IntroductionSometime you need to post a form to an different url from asp.net pages, for example you might need to send user to third party payment processing system using post method, asp.net does not provide any straight forward way to accomplish this task.
Problem which most users faces with server side form in aspx page are, you are not allowed to change action of form and you are allowed to use only one server side form per page.
Possible Solutions
1) One possible solution to this problem is to Create your own form control and use it on page this will allow you to change action of form, but again what if you do not want some existing input elements in current page to go to post.
2) There is good way to post form data using HttpWebResponse & HttpWebRequest class if you want to post data behind the scenes, but if you want to post data using user browser then you are stuck.
Our Solution
I will try to show you one possible way to accomplish this task, we will create 1)component that will create form with required fields and post the form to specified url, 2) web page that will use that component to post data and 3) page which will receive that data and display posted data.
A) RemotePost Class. public class RemotePost{
private System.Collections.Specialized.NameValueCollection Inputs
= new System.Collections.Specialized.NameValueCollection()
public string Url = ""
public string Method = "post"
public string FormName = "form1"
public void Add(string name,string value){
Inputs.Add(name,value)
}
public void Post(){
System.Web.HttpContext.Current.Response.Clear()
System.Web.HttpContext.Current.Response.Write("")
System.Web.HttpContext.Current.Response.Write(string.Format("",FormName))
System.Web.HttpContext.Current.Response.Write(string.Format("",
FormName,Method,Url))
for(int i=0i< Inputs.Keys.Counti++){
System.Web.HttpContext.Current.Response.Write
(string.Format("",Inputs.Keys[i],Inputs[Inputs.Keys[i]]))
}
System.Web.HttpContext.Current.Response.Write("")
System.Web.HttpContext.Current.Response.Write("")
System.Web.HttpContext.Current.Response.End()
}
}
Properties of our component
1) "Url" which is action of our form.
2) "Method" which is Method of our form, default is Post but you can also use Get
3) "FormName" which is name of form.
Methods of our component.
1) "Add" which will be used to add form input name and value. and
2) "Post" which will render html on page to do actual posting, most important part of this method is onload event of rendered html@#s body which will post form to specified URL.
and private field Inputs which will hold name value pair collection of all inputs that goes into form.
you can compile this class to dll and use in your project but for simplicity I am including that class directly into page itself.
B) Sample Page.
Following is sample page code which posts form to specified url. RemotePost myremotepost = new RemotePost()
myremotepost.Url = "http://www.jigar.net/demo/HttpRequestDemoServer.aspx"
myremotepost.Add("field1","Huckleberry")
myremotepost.Add("field2","Finn")
myremotepost.Post()
C) Receiving Page.
Following is sample page code which posts form to specified url.
This is the page where posting will occur for simplicity we will just write posed value so that we can know what was posted. <%@ Page Language="C#" %>
<script runat="server">
void Page_Load(object sender, EventArgs e){
if (Request.Form["field1" != null ){
Response.Write("field1 : " + Request.Form["field1" + "")}
if(Request.Form["field2" != null ){
Response.Write("field2 : " +Request.Form["field2" + "")}
}
</script>
Run Sample
Click "http://www.jigar.net/demo/RemotePost.aspx" target="new">here to run sample
There will be cases where you will need to tweak the code to suit your requirement. you will also need to check scenario where user uses back button of browser(from posted page) which will cause form to be posted again.
public class RemotePost{
private System.Collections.Specialized.NameValueCollection Inputs
= new System.Collections.Specialized.NameValueCollection()
public string Url = ""
public string Method = "post"
public string FormName = "form1"
public void Add(string name,string value){
Inputs.Add(name,value)
}
public void Post(){
System.Web.HttpContext.Current.Response.Clear()
System.Web.HttpContext.Current.Response.Write("")
System.Web.HttpContext.Current.Response.Write(string.Format("",FormName))
System.Web.HttpContext.Current.Response.Write(string.Format("",
FormName,Method,Url))
for(int i=0i< Inputs.Keys.Counti++){
System.Web.HttpContext.Current.Response.Write
(string.Format("",Inputs.Keys[i],Inputs[Inputs.Keys[i]]))
}
System.Web.HttpContext.Current.Response.Write("")
System.Web.HttpContext.Current.Response.Write("")
System.Web.HttpContext.Current.Response.End()
}
}
Properties of our component
1) "Url" which is action of our form.
2) "Method" which is Method of our form, default is Post but you can also use Get
3) "FormName" which is name of form.
Methods of our component.
1) "Add" which will be used to add form input name and value. and
2) "Post" which will render html on page to do actual posting, most important part of this method is onload event of rendered html@#s body which will post form to specified URL.
and private field Inputs which will hold name value pair collection of all inputs that goes into form.
you can compile this class to dll and use in your project but for simplicity I am including that class directly into page itself.
B) Sample Page.
Following is sample page code which posts form to specified url. RemotePost myremotepost = new RemotePost()
myremotepost.Url = "http://www.jigar.net/demo/HttpRequestDemoServer.aspx"
myremotepost.Add("field1","Huckleberry")
myremotepost.Add("field2","Finn")
myremotepost.Post()
C) Receiving Page.
Following is sample page code which posts form to specified url.
This is the page where posting will occur for simplicity we will just write posed value so that we can know what was posted. <%@ Page Language="C#" %>
<script runat="server">
void Page_Load(object sender, EventArgs e){
if (Request.Form["field1" != null ){
Response.Write("field1 : " + Request.Form["field1" + "")}
if(Request.Form["field2" != null ){
Response.Write("field2 : " +Request.Form["field2" + "")}
}
</script>
Run Sample
Click "http://www.jigar.net/demo/RemotePost.aspx" target="new">here to run sample
There will be cases where you will need to tweak the code to suit your requirement. you will also need to check scenario where user uses back button of browser(from posted page) which will cause form to be posted again.Jigar Desai
Jigar Desai is ASP.Net and .Net Consultant and he is looking for good assignment in USA.
下一篇:Asp.net中Treeview终极解决方案 >>
相关文章:
- · 《Essential .Net》读书笔记 - Chapter 1
- · 获取指定IP的终端的MAC地址
- · 网络传输(FTP)问题
- · Paint.NET: An Open Source GDI+ App Likes Photoshop
- · 看到有人用 WebClient来下载, 发篇用 WebRequest 实现有进度下载的吧.
- · 树形控件TreeView的序列化
- · 使用javascript+XML实现分页
- · 使用Control.Invoke处理多线程应用程序界面
- · WEB页面TreeView的应用-(得到所有选中的节点)
- · DotNetNuke(DNN)
- · 枚举器模式(Enumerator pattern)
- · 用ASP.NET 1.1 新特征防止Script攻击
- · 关于ASP.Net中的时间处理
- · javascript实现的数据表格:冻结列、调整列宽和客户端排序
- · [常见问题]cookie使用1.Page与HttpContext的Request、Response
- · 怎样在页面和页面的用户控件进行交互
- · webform页面间传值的特殊方法
- · 怎么直接建立一个DataTable并且为之添加数据
- · 我的第一个Asp.Net程序
- · 如何把数据放到web不能访问的文件夹中并给用户下载?
- · How to handle the concurrency problems on ASP.Net Database
- · 后台动态设置前台标签内容和属性
- · ASP.NET中让同一个页面不同的文本框回车响应不同的事件
- · 认识ASP.NET配置文件Web.config
- · 将ArrayList中的ListItem绑定到DropDownList中去
- · 安全存放web项目数据库连接字符串
- · 分享:Project级别的权限控制
- · Solidworks二次开发—06—在装配体中添加配合
- · 在Repeater中嵌套使用Repeater
- · 一个简单的加密/解密方法
- · 加入身份验证信息的SMTP mail发送
- · webconfig的设置节点说明
- · 现有的Web打印控制技术分成几种方案
- · 一段实现DataGrid的“编辑”、“取消”功能脚本[无刷新]
- · WEB图片高清晰浏览同打印
- · Tangram与软件的组合构造
- · solidworks二次开发-04-修改数据
- · Solidworks二次开发-05-装配体中插入零部件
