我正在使用Request.Form搜索控件名称。
当然我知道你可以使用AllKeys迭代所有值,你也可以做Form [“controlName”]。
然而,我的一些控件名称是动态的,能够执行以下操作非常有用:
1)获取名称以特定前缀开头的集合中的控件子集 2)搜索与模式匹配的控件名称,就像使用正则表达式一样。
但是我无法看到做这样的事情。
N.B我知道如何使用FindControl for ASP.NET控件,但这些是标准HTML。
答案 0 :(得分:7)
如果您使用的是C#3,则可以使用LINQ和扩展方法以非常好的方式实现此目的。首先,您需要在Bryan Watts中创建由this thread设计的扩展方法:
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'
答案 1 :(得分:0)
只需遍历Request.Form.AllKeys,在密钥名称上执行任何您想要的模式,如果匹配,则可以将值拉出。
foreach (var key in Request.Form.AllKeys)
{
if (key.StartsWith("abc"))
{
var value = Request.Form[key];
Do_Something(key, value);
}
}
答案 2 :(得分:0)
不要使用foreach(Request.Form.AllKeys中的var键)。我面前有一个缺陷,钥匙没有评估任何东西。在Request.Form.AllKeys中使用字符串键是安全的。