技术开发 频道

ASP.NET:细说Request与Request.Params

  我想结果一定是您所期待的,它是一个string[] ,我们可以方便的遍历它:

string[] array = Request.Params.GetValues("name");
if( array != null )
    foreach(
string val in array)

   再谈QueryString, Form

  前面我解释了NameValueCollection的工作原理,并揭示了Request.Params["name"]; 得到【abc,123】这个结果的原因。

  事实上,这个怪异的结果有时并不只是Params会有,同样的故事还可能由QueryString, Form这二个对象上演(最终会在Request[]那里也有体现)。

  我还是拿【我心目中的Asp.net核心对象】的示例来说明吧:

protected void Page_Load(object sender, EventArgs e)
{
    
string[] allkeys = Request.QueryString.AllKeys;
    
if( allkeys.Length == 0 )
        Response.Redirect(
            Request.RawUrl
+ "?aa=1&bb=2&cc=3&aa=" + HttpUtility.UrlEncode("5,6,7"), true);

    StringBuilder sb
= new StringBuilder();
    foreach(
string key in allkeys )
        sb.AppendFormat(
"{0} = {1}<br />",
            HttpUtility.HtmlEncode(key), HttpUtility.HtmlEncode(Request.QueryString[key]));

    this.labResult.Text
= sb.ToString();
}

   页面最终显示结果如下(注意键值为aa的结果):

  示例代码中,开始部分用于检查URL是否包含参数,如果没有,则加入一些参数。写成这样的原因是:第一次访问这个页面时,URL中肯定是不包含参数的,为了能演示,所以我就加了一些固定的参数,这样便于后面的讲解。

  这个示例也演示了:遇到同名的多个值,用逗号分开的做法,并不是Params才会有的,QueryString也可能会有,当然,Form也逃不掉这个特性的缠绕,不过,我现在倒想举个有使用价值的示例。

  我有这样一个录入界面(左边),并希望最终的录入结果以右图的方式显示:

  我想这个功能的实现并不难,但如何做才是最简单呢?

  下面我贴出我的实现方法,大家看看算不算比较容易:

    <tr><td style="vertical-align: top">项目类型</td><td>
    
<% foreach( string pt in AppHelper.ProjectTypes ) { %>
        
<label><input type="checkbox" name="ProjectType" value="<%= pt %>" /><%= pt%></label><br />
    
<% } %>
        
</td></tr>

  注意:所有的checkbox的name都是一样的。

  服务端嘛,我认为没有必要再贴代码了,我想您懂的。

  在这个示例中,我正好利用了NameValueCollection的这个特点,让它帮我实现了这个逗号分隔的效果,要不然,我还得自己去做!

0
相关文章