ASP.NET如何知道哪个按钮导致PostBack?

时间:2011-11-12 05:49:18

标签: asp.net

我正在使用ASP.NET 4创建一个包含jQuery UI Sortable plugin中使用的元素的页面。

所有这些元素都包含一个名为SubmitButton的按钮(实现为提交按钮)。除了其中一个按钮之外的所有按钮都隐藏在页面的Load事件中。但是,如果我将元素拖到另一个位置,然后使用该按钮提交页面,ASP.NET会感到困惑。

ASP.NET认为我点击了一个不同的按钮,该按钮在页面上甚至不可见,但与移动前点击按钮所在位置的内容相关联。 (如果我不移动元素,它可以正常工作。)

我似乎无法确定这是怎么回事。据我了解,ASP.NET知道哪个提交按钮导致回发,因为按钮的名称和值包含在回发数据中。 (__EVENTTARGET在这里没有任何作用,并且是空的。)那么如何才能认为不同的按钮提交了该页面呢?

ASP.NET怎么会对哪个按钮提交页面感到困惑?

(抱歉,无法将此页面放在公共网站上。)

1 个答案:

答案 0 :(得分:0)

我解决了这个问题,这就是我找到的。

首先,默认情况下,按钮呈现为<input>标签,类型为= submit。这种情况下的回发机制与ASP.NET无关。回发数据包括导致回发的提交按钮的名称以及按钮的文本(在表单名称=文本中)。

但默认情况下,ASP.NET按钮名称包含所有父控件的名称。当这些控件未命名时,会给它们一个ID,如ctl00,ctl01,ctl02等。结果是我的所有按钮都保证有唯一的名称。

问题是这些按钮和父控件都是动态创建的。在回发上,这些控件在加载事件中重新构建,但是以新顺序重新构建。由于订单会影响名称(ctl01 vs ctl02),这意味着我的提交按钮的名称与最初呈现页面时的名称不同。

结果是ASP.NET看到与用于触发回发的提交按钮关联的错误名称。