http://hi.baidu.com/lh_zn/blog/item/4b042ead71042b084a36d6b9.html
*此次的程序主要解决了页面之间接收和传递多个参数的问题。
思路:以XML配置化的思想编写此DEMO的。
主要对项目中参数接收和传递做到可配置化,宜维护。。.
文字流程图:1.A页面Response.Write一个Form到B页面;
2.B页面接收之后,B页面中有"下一步按钮",Press Button之后,提交从A Page接收到C Page.
A Page:-----Default.aspx
B.Page------WebForm1.aspx
C.Page------WebForm2.aspx
CommonClass -----ParamClass
PageBaseClass-----BaseIPage
XML-----ParamDictionary.xml
以下是代码,供参考
ParamDictionary.xml
<Param key="orderid" value=""/>
<Param key="FAV_FID1" value=""/>
<Param key="FAV_Status1" value=""/>
<Param key="FAV_NeedCheck1" value=""/>
<Param key="FAV_FID2" value=""/>
<Param key="FAV_Status2" value=""/>
<Param key="FAV_NeedCheck2" value=""/>
<Param key="FAV_CheckLine" value=""/>
<Param key="FlightWay" value=""/>
<Param key="HomeCity" value=""/>
<Param key="DestCity1" value=""/>
<Param key="DDatePeriod1" value=""/>
<Param key="startPeriod" value=""/>
<Param key="DestCity2" value=""/>
<Param key="startPeriod2" value=""/>
<Param key="ADatePeriod1" value=""/>
<Param key="TicketAgency_List" value=""/>
<Param key="ChildType" value=""/>
<Param key="Quantity" value=""/>
<Param key="DSeatClass" value=""/>
<Param key="AirlineChoice" value=""/>
<Param key="EMoneyIDList" value=""/>
<Param key="GetNeedGuarantee" value=""/>
<Param key="IsSubmitTempOrder" value=""/>
<Param key="NoSignupLogin" value=""/>
</ParamsDictionary>
{
protected void Page_Load(object sender, EventArgs e)
{
//Test Data
string responseString =
"<Form id=\"frmTemp\" action=\"WebForm1.aspx\" method=\"post\">" +
"<input type=\"hidden\" name=\"orderid\" value=\"1111\">" +
"<input type=\"hidden\" name=\"FAV_FID1\" value=\"2222\">" +
"<input type=\"hidden\" name=\"FAV_Status1\" value=\"3333\">" +
"<input type=\"hidden\" name=\"FAV_NeedCheck1\" value=\"4444\">" +
"<input type=\"hidden\" name=\"FAV_FID2\" value=\"5555\">" +
"<input type=\"hidden\" name=\"FAV_Status2\" value=\"6666\">" +
"<input type=\"hidden\" name=\"FAV_NeedCheck2\" value=\"7777\">" +
"<input type=\"hidden\" name=\"FAV_CheckLine\" value=\"8888\">" +
"<input type=\"hidden\" name=\"FlightWay\" value=\"9999\">" +
"<input type=\"hidden\" name=\"HomeCity\" value=\"aaaa\">" +
"<input type=\"hidden\" name=\"DestCity1\" value=\"bbbbb\">" +
"<input type=\"hidden\" name=\"DDatePeriod1\" value=\"ccccc\">" +
"<input type=\"hidden\" name=\"startPeriod\" value=\"eeee\">" +
"<input type=\"hidden\" name=\"DestCity2\" value=\"ffff\">" +
"<input type=\"hidden\" name=\"startPeriod2\" value=\"ggggg\">" +
"<input type=\"hidden\" name=\"ADatePeriod1\" value=\"qqqq\">" +
"<input type=\"hidden\" name=\"TicketAgency_List\" value=\"wwwww\">" +
"<input type=\"hidden\" name=\"ChildType\" value=\"eeeee\">" +
"<input type=\"hidden\" name=\"Quantity\" value=\"iiiiii\">" +
"<input type=\"hidden\" name=\"DSeatClass\" value=\"jjjjj\">" +
"<input type=\"hidden\" name=\"AirlineChoice\" value=\"ppppp\">" +
"<input type=\"hidden\" name=\"EMoneyIDList\" value=\"vvvvv\">" +
"<input type=\"hidden\" name=\"GetNeedGuarantee\" value=\"xxxxxx\">" +
"<input type=\"hidden\" name=\"IsSubmitTempOrder\" value=\"sssss\">" +
"<input type=\"hidden\" name=\"NoSignupLogin\" value=\"llllll\">" +
"</form><script language=\"javascript\">document.getElementById(\"frmTemp\").submit();</script>";
Response.Write(responseString);
}
}
{
private ParamClass paramClass = new ParamClass();
private BaseIPage basePage = new BaseIPage();
protected void Page_Load(object sender, EventArgs e)
{
NameValueCollection _hiddenVariables = new NameValueCollection();
//Check RequestForm
if (paramClass.CheckFormIsNull(Request.Form) == true)
{
//从RequestForm中取值,并存放到Dictionary
Dictionary<String, String> paramsDictionary = paramClass.SaveParamsToDictionary(Request.Form, basePage.XMLPath);
//输出hidden到Page
paramClass.WriteHiddenField(paramClass.ParseTempString(paramsDictionary, _hiddenVariables), Page.ClientScript);
}
}
protected void Button1_Click(object sender, EventArgs e)
{
//Check RequestForm
if (paramClass.CheckFormIsNull(Request.Form) == true)
{
//从RequestForm中取值,并存放到Dictionary
Dictionary<String, String> paramsDictionary = paramClass.SaveParamsToDictionary(Request.Form, basePage.XMLPath);
//跳转下一页,并传递参数
//string url = "http://" + ViewState["ServerName"].ToString() + "/Domestic/ConfirmOrder.aspx";
Response.Write(paramClass.ParseTempString(paramsDictionary, "WebForm2.aspx"));
}
}
}
{
private ParamClass paramClass = new ParamClass();
private BaseIPage basePage = new BaseIPage();
protected void Page_Load(object sender, EventArgs e)
{
NameValueCollection _hiddenVariables = new NameValueCollection();
//Check RequestForm
if (paramClass.CheckFormIsNull(Request.Form) == true)
{
//从RequestForm中取值,并存放到Dictionary
Dictionary<String, String> paramsDictionary = paramClass.SaveParamsToDictionary(Request.Form, basePage.XMLPath);
//输出hidden到Page
paramClass.WriteHiddenField(paramClass.ParseTempString(paramsDictionary, _hiddenVariables), Page.ClientScript);
}
}
}
{
CheckFormIsNullCheckFormIsNull#region CheckFormIsNull
/**//**//**//// <summary>
/// 检查RequestForm是否为空和count>0
/// </summary>
/// <param name="requestForm"></param>
/// <returns></returns>
public bool CheckFormIsNull(NameValueCollection requestForm)
{
return (null != requestForm && requestForm.Count > 0);
}
#endregion
SaveParamsToDictionarySaveParamsToDictionary#region SaveParamsToDictionary
/**//**//**//// <summary>
/// 把Request.Form中的内容存储到Dictionary
/// </summary>
/// <param name="nameValueCollection">Request.Form</param>
/// <returns></returns>
public Dictionary<String, String> SaveParamsToDictionary(NameValueCollection nameValueCollection, string path)
{
//把Request.Form中的值全部取出
string requestForm = Convert.ToString((nameValueCollection));
Dictionary<String, String> pageParameter = new Dictionary<String, String>();
if (!String.IsNullOrEmpty(requestForm) == true)
{
ParamDictionary(pageParameter, path);
string[] parameters = requestForm.Split('&');
foreach (string parameter in parameters)
{
string[] param = parameter.Split('=');
if (pageParameter.ContainsKey(param[0]))
{
pageParameter[param[0]] = param[1];
}
}
}
return pageParameter;
}
#endregion
ParamDictionaryParamDictionary#region ParamDictionary
/**//**//**//// <summary>
/// 接收的参数名字列表
/// </summary>
public void ParamDictionary(Dictionary<String, String> pageParameter, string path)
{
第一写法:用Xml第一写法:用Xml#region 第一写法:用Xml
XmlDocument xmlDoc = new XmlDocument();
XmlTextReader xmlTextReader = new XmlTextReader(path);
xmlDoc.Load(xmlTextReader);
foreach (XmlNode children in xmlDoc.ChildNodes)
{
foreach (XmlNode child in children)
{
pageParameter.Add(child.Attributes["key"].Value, child.Attributes["value"].Value);
}
}
#endregion
第二写法第二写法#region 第二写法
//pageParameter.Add("orderid", String.Empty);
//pageParameter.Add("FAV_FID1", String.Empty);
//pageParameter.Add("FAV_Status1", String.Empty);
//pageParameter.Add("FAV_NeedCheck1", String.Empty);
//pageParameter.Add("FAV_FID2", String.Empty);
//pageParameter.Add("FAV_Status2", String.Empty);
//pageParameter.Add("FAV_NeedCheck2", String.Empty);
//pageParameter.Add("FAV_CheckLine", String.Empty);
//pageParameter.Add("FlightWay", String.Empty);
//pageParameter.Add("HomeCity", String.Empty);
//pageParameter.Add("DestCity1", String.Empty);
//pageParameter.Add("DDatePeriod1", String.Empty);
//pageParameter.Add("startPeriod", String.Empty);
//pageParameter.Add("DestCity2", String.Empty);
//pageParameter.Add("startPeriod2", String.Empty);
//pageParameter.Add("ADatePeriod1", String.Empty);
//pageParameter.Add("TicketAgency_List", String.Empty);
//pageParameter.Add("ChildType", String.Empty);
//pageParameter.Add("Quantity", String.Empty);
//pageParameter.Add("DSeatClass", String.Empty);
//pageParameter.Add("AirlineChoice", String.Empty);
//pageParameter.Add("EMoneyIDList", String.Empty);
//pageParameter.Add("GetNeedGuarantee", String.Empty);
//pageParameter.Add("IsSubmitTempOrder", String.Empty);
//pageParameter.Add("NoSignupLogin", String.Empty);
#endregion
}
#endregion
ParseTempStringParseTempString#region ParseTempString
/**//**//**//// <summary>
/// 拼凑一个临时跳转Form
/// </summary>
/// <param name="paramsDictionary"></param>
/// <param name="url"></param>
/// <returns></returns>
public string ParseTempString(Dictionary<String, String> paramsDictionary, string url)
{
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append("<html><body><form id=\"frmCreditCardTemp\" action=\"" + url + "\" method=\"post\">");
foreach (string key in paramsDictionary.Keys)
{
stringBuilder.Append("<input type=\"hidden\" name=\"" + key + "\" value=\"" + paramsDictionary[key].ToString() + "\">");
}
stringBuilder.Append("</form><script language=\"javascript\">document.getElementById(\"frmCreditCardTemp\").submit();</script></body></html>");
return stringBuilder.ToString();
}
/**//**//**//// <summary>
/// 拼凑一个一个Hidden,输出到页面中
/// </summary>
/// <param name="paramsDictionary">参数列表</param>
/// <param name="hiddenParams"></param>
/// <returns></returns>
public NameValueCollection ParseTempString(Dictionary<String, String> paramsDictionary, NameValueCollection hiddenParams)
{
foreach (string key in paramsDictionary.Keys)
{
hiddenParams.Add(key, paramsDictionary[key]);
}
return hiddenParams;
}
#endregion
WriteHiddenFieldWriteHiddenField#region WriteHiddenField
/**//**//**//// <summary>
/// 以hidden Field的形式输出到页面
/// </summary>
public void WriteHiddenField(NameValueCollection hiddenVar, ClientScriptManager sm)
{
for (int i = 0; i < hiddenVar.Count; i++)
{
sm.RegisterHiddenField(hiddenVar.GetKey(i), hiddenVar[i]);
}
}
#endregion
}
{
/**//**//**//// <summary>
/// XmlPath
/// </summary>
public String XMLPath
{
get
{
return Server.MapPath("~/ParamDictionary.xml");
}
}
}
注意需要增加如下引用
using System.Collections.Specialized;
using System.Collections.Generic;
using System.Text;
代码部分说明:
参数传递依靠的是
<Form id="frmTemp" action="WebForm1.aspx" method="post">
<input type="hidden" name="orderid" value="1111">
<input type="hidden" name="FAV_FID1" value="2222">
<input type="hidden" name="FAV_Status1" value="3333">
<input type="hidden" name="FAV_NeedCheck1" value="4444">
<input type="hidden" name="FAV_FID2" value="5555">
<input type="hidden" name="FAV_Status2" value="6666">
<input type="hidden" name="FAV_NeedCheck2" value="7777">
<input type="hidden" name="FAV_CheckLine" value="8888">
<input type="hidden" name="FlightWay" value="9999">
<input type="hidden" name="HomeCity" value="aaaa">
<input type="hidden" name="DestCity1" value="bbbbb">
<input type="hidden" name="DDatePeriod1" value="ccccc">
<input type="hidden" name="startPeriod" value="eeee">
<input type="hidden" name="DestCity2" value="ffff">
<input type="hidden" name="startPeriod2" value="ggggg">
<input type="hidden" name="ADatePeriod1" value="qqqq">
<input type="hidden" name="TicketAgency_List" value="wwwww">
<input type="hidden" name="ChildType" value="eeeee">
<input type="hidden" name="Quantity" value="iiiiii">
<input type="hidden" name="DSeatClass" value="jjjjj">
<input type="hidden" name="AirlineChoice" value="ppppp">
<input type="hidden" name="EMoneyIDList" value="vvvvv">
<input type="hidden" name="GetNeedGuarantee" value="xxxxxx">
<input type="hidden" name="IsSubmitTempOrder" value="sssss">
<input type="hidden" name="NoSignupLogin" value="llllll">
</form>
<script language="javascript">
document.getElementById("frmTemp").submit();</script>
</BODY>
input type="hidden"主要作用是
1,type=text
输入类型是text,这是我们见的最多也是使用最多的,比如登陆输入用户名,注册输入电话号码,电子邮件,家庭住址等等。当然这也是Input的默认类型。
参数name:同样是表示的该文本输入框名称。
参数size:输入框的长度大小。
参数maxlength:输入框中允许输入字符的最大数。
参数value:输入框中的默认值
特殊参数readonly:表示该框中只能显示,不能添加修改。
<form>
your name:
<input type="text" name="yourname" size="30" maxlength="20" value="输入框的长度为30,允许最大字符数为20"><br>
<input type="text" name="yourname" size="30" maxlength="20" readonly value="你只能读不能修改">
</form>
2,type=password
不用我说,一看就明白的密码输入框,最大的区别就是当在此输入框输入信息时显示为保密字符。
参数和“type=text”相类似。
<form>
your password:
<input type="password" name="yourpwd" size="20" maxlength="15" value="123456">密码长度小于15
</form>
3,type=file
当你在BBS上传图片,在EMAIL中上传附件时一定少不了的东西:)
提供了一个文件目录输入的平台,参数有name,size。
<form>
your file:
<input type="file" name="yourfile" size="30">
</form>
4,type=hidden
非常值得注意的一个,通常称为隐藏域:如果一个非常重要的信息需要被提交到下一页,但又不能或者无法明示的时候。
一句话,你在页面中是看不到hidden在哪里。最有用的是hidden的值。
<form name="form1">
your hidden info here:
<input type="hidden" name="yourhiddeninfo" value="cnbruce.com">
</form>
<script>
alert("隐藏域的值是 "+document.form1.yourhiddeninfo.value)
</script>
5,type=button
标准的一windows风格的按钮,当然要让按钮跳转到某个页面上还需要加入写JavaScript代码
<form name="form1">
your button:
<input type="button" name="yourhiddeninfo" value="Go,Go,Go!" onclick="window.open('http://www.cnbruce.com')">
</form>
6,type=checkbox
多选框,常见于注册时选择爱好、性格、等信息。参数有name,value及特别参数checked(表示默认选择)
其实最重要的还是value值,提交到处理页的也就是value。(附:name值可以不一样,但不推荐。)
<form name="form1">
a:<input type="checkbox" name="checkit" value="a" checked><br>
b:<input type="checkbox" name="checkit" value="b"><br>
c:<input type="checkbox" name="checkit" value="c"><br>
</form>
name值可以不一样,但不推荐<br>
<form name="form1">
a:<input type="checkbox" name="checkit1" value="a" checked><br>
b:<input type="checkbox" name="checkit2" value="b"><br>
c:<input type="checkbox" name="checkit3" value="c"><br>
</form>
7,type=radio
即单选框,出现在多选一的页面设定中。参数同样有name,value及特别参数checked.
不同于checkbox的是,name值一定要相同,否则就不能多选一。当然提交到处理页的也还是value值。
<form name="form1">
a:<input type="radio" name="checkit" value="a" checked><br>
b:<input type="radio" name="checkit" value="b"><br>
c:<input type="radio" name="checkit" value="c"><br>
</form>
下面是name值不同的一个例子,就不能实现多选一的效果了<br>
<form name="form1">
a:<input type="radio" name="checkit1" value="a" checked><br>
b:<input type="radio" name="checkit2" value="b"><br>
c:<input type="radio" name="checkit3" value="c"><br>
</form>
8,type=image
比较另类的一个,自己看看效果吧,可以作为提交式图片
<form name="form1" action="xxx.asp">
your Imgsubmit:
<input type="image" src="../blog/images/face4.gif">
</form>
9,type=submit and type=reset
分别是“提交”和“重置”两按钮
submit主要功能是将Form中所有内容进行提交action页处理,reset则起个快速清空所有填写内容的功能。
<form name="form1" action="xxx.asp">
<input type="text" name="yourname">
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>