处理可变数量的表单字段

时间:2010-05-17 04:39:15

标签: asp.net asp.net-mvc forms

我正在处理一个显示订单信息的表单。每个订单都有一个唯一的ID,但它们不一定是表单上的顺序。此外,字段数可以变化(表单上每行一个字段)。表单中的输入不会直接映射到数据库中,而是会添加到数据库中的当前值,然后保存。表格的一个示例如下图所示 - 右侧的标注显示每行的ID。 Form example

我知道如何生成这样的表单,但我无法弄清楚如何可以轻松地处理这些行。我也知道如何为每个字段赋予唯一标识符,例如name="order-23"name="order[23]",但是如何翻译该名称以便我可以更新数据库中的相关记录?


编辑:我能想到的一个解决方案是遍历 FormCollection中的每个表单字段,如果字段的名称与模式,然后我将从该字段名称中提取数字并处理它 但是,我觉得必须有一个更简单的方法 - 这个方法可能会涉及每个字段上的相当多的字符串处理,如果我必须在以后为每一行添加额外的字段,可能会有所挫败

3 个答案:

答案 0 :(得分:1)

回发后你没有ID列表吗?我相信您不应该依赖从表单实际发送的ID,因为任何人都可以将表单上的ID更改为他们想要的任何内容,因此这是一个安全问题。所以你应该在回发后有一个你想要更新的ID列表(你用来创建表单的列表)。在这种情况下,您确切地知道应该使用哪个id字符串来从FormCollection中检索值。

如果你真的无法获得要更新的ID列表,只需按照评论中的建议使用FormCollection迭代。与请求处理时所做的所有其他事情相比,字符串处理并不昂贵。

答案 1 :(得分:0)

如果您有姓名,那么只需使用Request.Form [“order-23”]读取值,或者在pre-init页面中重新创建控件,您就可以访问save事件中的值直接通过创建的控件。

答案 2 :(得分:0)

我已在CMS中完成此操作。

基本上我有点被骗了。

这个想法是这样的......

将表单呈现给客户端,然后查看源代码gneerated。 您应该看到它生成了一个带有action属性的表单标记。

当您点击提交按钮时,表单将被发送到该网址,因此在提交订单的情况下,您会将页面发布回OrderPage.aspx?OrderId = xxxx

然后在服务器上,您将为您的数据库构建一个更新语句,其中包含类似......

的内容

“更新订单ID =”+ request.querystring [“OrderId”]

的订单

那么你如何更新行动...

在调用页面中,假设您有一个名为“新订单”的链接,当点击该链接时,您需要做两件事......

  1. 重定向到此页面。
  2. 为此新订单生成订单ID。
  3. 好的第一个很简单,只需将其链接到此页面即可。

    第二个......

    如果这个页面不是回发,如果(!IsPostback){/ *得到一个新的id * /}取决于你的订单ID,这可能涉及生成一个新的guid或做一些事情,比如通过执行获取列表中的下一个数字从db。中选择max(id)。

    一旦你有了这个新的id,你仍然应该在page_load事件中。

    this.form.Action = this.form.Action +“?OrderId =”+ yourNewOrderId;

    ... tada ......

    将页面发回客户端。

    查看来源。