1

我有一个相当复杂的表单(实际上是用户控件),上面有一个不需要回发的文本框控件。有没有办法从帖子中删除控件?是的,这个文本框是可编辑的。

更多信息:这是用于信用卡处理表格的,因此“最终”提交将发布到另一个站点的页面。但是,在此之前有大量的服务器端处理正在进行。我知道我可以将信用卡号文本框移到另一个页面——但是这个要求来得太晚了,我会尽量不用重新做很多事情。

4

2 回答 2

2

最简单的方法是使用 html 输入而不是 ASP 文本框。如果未对它们进行设置,则无法从代码中访问runat="server"它们。

或使用 viewstate 属性 ( http://msdn.microsoft.com/en-us/library/system.web.ui.control.enableviewstate.aspx )

于 2012-06-27T16:23:24.580 回答
0

所以情况是,您有一个在用户浏览器中呈现的表单,其中包含指向不同站点的操作,您需要确保在提交表单时不会发送其中一个表单字段。

在我看来,在这种情况下,您不能绝对确保没有发布该值。有许多不同的方法可以使用 javascript 来解决这个问题(在提交之前禁用输入、清除值等),但是如果脚本被关闭,我认为你不走运。

但是由于您可以准备将​​表单发送到其他服务器(更改表单上的操作或使用 PostBackUrl 启用按钮),我想您也可以将文本框上的 Enabled 属性设置为 false。这意味着它不能再在发布到其他服务器之前在最终页面上进行编辑。或者您可以隐藏文本框 a (因此它根本不会被重新渲染)并将该字段显示为标签或文字。

但即便如此,您仍然必须以某种方式确保秘密值不包含在表单的视图状态中。如果您使用标签或文字,它将是什么。也适用于在上次回发时禁用或隐藏的文本框。通常,视图状态只是一个 base64 编码的字符串,因此从那里找到信用卡号是微不足道的。在将表单设置为发布到其他服务器之前,您可以通过关闭最后一个帖子中的相关控件(甚至整个页面)的视图状态来解决此问题。

如果您无法确定哪一个将是最后一次回发到您的服务器,那么我认为如果没有更重大的更改,您将不走运。很抱歉成为一个沮丧的人。一些看似微不足道的事情对于 Asp.Net 网络表单来说却很难。

也许您可以添加一个单独的页面,仅使用您需要发送到其他服务器的数据填充该页面,并拥有一种“确认页面”。在该页面中,您可以关闭视图状态,显示所有汇总数据(使用标签和文字等),并且要发布的实际数据可以作为隐藏字段包含在表单中。然后,当用户“确认”时,该表单将发布到另一台服务器。

于 2012-06-27T21:02:28.813 回答