加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

.net – 在Request.Form中搜索控件/解析NameValueCollection

发布时间:2020-12-16 09:30:39 所属栏目:asp.Net 来源:网络整理
导读:我正在使用Request.Form搜索控件名称. 当然我知道你可以使用AllKeys迭代所有值,你也可以做Form [“controlName”]. 但是我的一些控件名称是动态的,能够执行以下操作会很有用: 1)获取名称以特定前缀开头的集合中的控件子集 2)搜索与模式匹配的控件名称,就像
我正在使用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>

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

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'

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读