【问题标题】:Filtering form keys/names过滤表单键/名称
【发布时间】:2013-12-26 09:44:00
【问题描述】:

我目前有这样的事情:

<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]"/>

【问题讨论】:

  • 不发布禁用的输入,但这需要一个完整的迭代,无论是在生成表单时(服务器端),还是在发布之前(客户端)。
  • 输入未被禁用,它们被隐藏;显然是张贴的。
  • 隐藏!= 禁用。所以他们应该被张贴。 ASP.NET 没有对象映射系统,因此您必须遍历表单元素。然而,C# MVC 可以将元素映射到对象,这可能是您正在寻找的,但是,您必须在 MVC 模型中构建整个站点才能实现这一点。
  • @Kami 好的。这是您可能已经知道的网络表单。应该在问题中提到它。
  • 嘿,我不是说它们没有隐藏。我只是建议,如果您将它们设置为 disabled,则不会发布。

标签: c# html asp.net forms webforms


【解决方案1】:

只需将所有控件命名为foo,不带后缀即可。

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

如果您需要保留几块数据(例如,数字和相关数据),您可以

  • 使用特殊格式,例如数字破折号数据,如“1-firstValue”、“2-secondValue”。您可以在呈现页面时对其进行格式化,并在获取发布值时对其进行解析。
  • 使用众所周知的序列化程序,例如 JSON.Net。创建隐藏字段时,将序列化数据设置为值。当您获得发布的值时,您可以对它们进行反序列化(此外,您可以在客户端轻松操作 JSON 数据)。

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

为此,您可以使用众所周知的、有据可查的、易于使用的 JSON.NET。 (如果您使用的是旧版本,则有适用于旧 .NET 框架的版本)。

【讨论】:

  • 好吧,至少它比我目前的解决方案要好 :) 谢谢。但是,这并没有考虑到结束数字,我也需要。但我会想办法的
猜你喜欢
  • 1970-01-01
  • 2018-11-20
  • 2020-06-20
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
  • 1970-01-01
  • 2017-11-26
  • 2014-06-22
相关资源
最近更新 更多