我正在处理一个显示订单信息的表单。每个订单都有一个唯一的ID,但它们不一定是表单上的顺序。此外,字段数可以变化(表单上每行一个字段)。表单中的输入不会直接映射到数据库中,而是会添加到数据库中的当前值,然后保存。表格的一个示例如下图所示 - 右侧的标注显示每行的ID。
我知道如何生成这样的表单,但我无法弄清楚如何可以轻松地处理这些行。我也知道如何为每个字段赋予唯一标识符,例如name="order-23"
或name="order[23]"
,但是如何翻译该名称以便我可以更新数据库中的相关记录?
编辑:我能想到的一个解决方案是遍历 FormCollection
中的每个表单字段,如果字段的名称与模式,然后我将从该字段名称中提取数字并处理它
但是,我觉得必须有一个更简单的方法 - 这个方法可能会涉及每个字段上的相当多的字符串处理,如果我必须在以后为每一行添加额外的字段,可能会有所挫败
答案 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”]
的订单那么你如何更新行动...
在调用页面中,假设您有一个名为“新订单”的链接,当点击该链接时,您需要做两件事......
好的第一个很简单,只需将其链接到此页面即可。
第二个......
如果这个页面不是回发,如果(!IsPostback){/ *得到一个新的id * /}取决于你的订单ID,这可能涉及生成一个新的guid或做一些事情,比如通过执行获取列表中的下一个数字从db。中选择max(id)。
一旦你有了这个新的id,你仍然应该在page_load事件中。
this.form.Action = this.form.Action +“?OrderId =”+ yourNewOrderId;
... tada ......
将页面发回客户端。
查看来源。