2013-12-09 67 views
0

我现在有这样的事情:过滤形式键/名称

<input type="hidden" value="123" name="foo_1"/> 
<input type="hidden" value="123" name="foo_2"/> 
<input type="hidden" value="123" name="bar_2"/> 

我只需要形式值,其中与foo钥匙启动:

foreach (string key in Request.Form.Cast<string>().Where(key => 
                 key.StartsWith("foo_"))) 
{ 
    //get value (123) + the ending number from the string (1 and 2 in this case) 
} 

我不是分裂的粉丝该字符串也不过滤以某种东西开头的键。我想这样做肯定有更“漂亮”的方式?也许像

<input type="hidden" value="123" name="[foo][1]"/> 
+1

已禁用的输入未发布,但这需要完整的迭代,无论是在生成表单(服务器端)还是在发布(客户端)之前。 –

+2

输入未被禁用,它们被隐藏;这显然是张贴。 –

+1

隐藏!=禁用。所以他们应该被张贴。 ASP.NET没有对象映射系统,因此您必须遍历表单元素。但是,C#MVC可以将元素映射到对象,这可能是您正在寻找的对象,但是,您必须在MVC模型中构建整个站点才能实现此目的。 – Kami

回答

1

只需给所有的控件相同的名称foo,没有后缀。

然后,在服务器端,查找Request.Form["foo"]。它将包含所有值,逗号分隔。你可以将它们与string.Split()

如果您需要保存的数据的几个块再拆(例如,数量及相关数据),您可以

  • 使用一个特殊的格式,例如数字仪表板数据,如“1-firstValue”,“2-secondValue”。您可以在渲染页面时对其进行格式设置,并在获取发布的值时进行解析。
  • 使用众所周知的序列化程序,例如JSON.Net。当您创建隐藏字段时,您将序列化数据设置为值。如果您获取了发布的值,则可以将其反序列化(此外,您可以在客户端方便地操纵JSON数据)。

如果您使用JSON序列化程序,您甚至可以将所有数据保存在单个隐藏字段中,并在服务器端轻松恢复。

您可以使用众所周知的,有据可查的,易于使用的,JSON.NET。 (如果您使用的是旧版本,那么旧版本的.NET框架就有这些版本)。

+0

嗯,至少它比我目前的解决方案好:)谢谢。但是,这并不需要考虑结尾数字,这也是我需要的。但我会想出一些东西 – Johan

+1

看我的编辑。包含extar信息。 – JotaBe