如何在Request.Form中高效搜索并解析控件名称的NameValueCollection?

2026-03-30 13:131阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计464个文字,预计阅读时间需要2分钟。

如何在Request.Form中高效搜索并解析控件名称的NameValueCollection?

在使用Request.Form搜索控件名称时,你了解到可以使用AllKeys遍历所有值。同时,你还可以使用Form[controlName]。但是,如果你的某些控件名称是动态的,执行以下操作将非常有用:1)获取名为特殊的名称。

我正在使用Request.Form搜索控件名称.

当然我知道你可以使用AllKeys迭代所有值,你也可以做Form [“controlName”].

但是我的一些控件名称是动态的,能够执行以下操作会很有用:

1)获取名称以特定前缀开头的集合中的控件子集
2)搜索与模式匹配的控件名称,就像使用正则表达式一样.

但我无法看到做这样的事情.

N.B我知道如何使用FindControl for ASP.NET控件,但这些是标准的HTML.

如果您使用的是C#3,则可以使用LINQ和扩展方法以非常好的方式实现此目的.首先,您需要在 this thread中创建 Bryan Watts设计的扩展方法:

public static IEnumerable<KeyValuePair<string, string>> ToPairs(this NameValueCollection collection) { if (collection == null) { throw new ArgumentNullException("collection"); } return collection.Cast<string>().Select(key => new KeyValuePair<string, string>(key, collection[key])); }

现在,假设你有一个这样的表格:

<form id="form1" runat="server"> <div> <input type="text" name="XXX_Name" value="Harold Pinter" /> <input type="text" name="XXX_Email" value="harold@example.com" /> <input type="text" name="XXX_Phone" value="1234 5454 5454" /> <input type="text" name="YYY_Name" value="AN. Other" /> <input type="text" name="YYY_Email" value="another@example.com" /> <input type="text" name="YYY_Phone" value="8383 3434 3434" /> <input type="submit" value="submit button" /> </div> </form>

您可以在代码隐藏中执行此操作:

如何在Request.Form中高效搜索并解析控件名称的NameValueCollection?

protected void Page_Load(object sender, EventArgs e) { var data = Request.Form.ToPairs().Where(k => k.Key.StartsWith("XXX_")); foreach (var item in data) { Response.Write(String.Format("{0} = '{1}', ", item.Key, item.Value)); } }

哪个会输出:

XXX_Name = 'Harold Pinter' XXX_Email = 'harold@example.com' XXX_Phone = '1234 5454 5454'

本文共计464个文字,预计阅读时间需要2分钟。

如何在Request.Form中高效搜索并解析控件名称的NameValueCollection?

在使用Request.Form搜索控件名称时,你了解到可以使用AllKeys遍历所有值。同时,你还可以使用Form[controlName]。但是,如果你的某些控件名称是动态的,执行以下操作将非常有用:1)获取名为特殊的名称。

我正在使用Request.Form搜索控件名称.

当然我知道你可以使用AllKeys迭代所有值,你也可以做Form [“controlName”].

但是我的一些控件名称是动态的,能够执行以下操作会很有用:

1)获取名称以特定前缀开头的集合中的控件子集
2)搜索与模式匹配的控件名称,就像使用正则表达式一样.

但我无法看到做这样的事情.

N.B我知道如何使用FindControl for ASP.NET控件,但这些是标准的HTML.

如果您使用的是C#3,则可以使用LINQ和扩展方法以非常好的方式实现此目的.首先,您需要在 this thread中创建 Bryan Watts设计的扩展方法:

public static IEnumerable<KeyValuePair<string, string>> ToPairs(this NameValueCollection collection) { if (collection == null) { throw new ArgumentNullException("collection"); } return collection.Cast<string>().Select(key => new KeyValuePair<string, string>(key, collection[key])); }

现在,假设你有一个这样的表格:

<form id="form1" runat="server"> <div> <input type="text" name="XXX_Name" value="Harold Pinter" /> <input type="text" name="XXX_Email" value="harold@example.com" /> <input type="text" name="XXX_Phone" value="1234 5454 5454" /> <input type="text" name="YYY_Name" value="AN. Other" /> <input type="text" name="YYY_Email" value="another@example.com" /> <input type="text" name="YYY_Phone" value="8383 3434 3434" /> <input type="submit" value="submit button" /> </div> </form>

您可以在代码隐藏中执行此操作:

如何在Request.Form中高效搜索并解析控件名称的NameValueCollection?

protected void Page_Load(object sender, EventArgs e) { var data = Request.Form.ToPairs().Where(k => k.Key.StartsWith("XXX_")); foreach (var item in data) { Response.Write(String.Format("{0} = '{1}', ", item.Key, item.Value)); } }

哪个会输出:

XXX_Name = 'Harold Pinter' XXX_Email = 'harold@example.com' XXX_Phone = '1234 5454 5454'