我有一个继承自 .NET 的 CompositeControl 类的自定义控件。此控件覆盖 CreateChildControls 以便动态构建其子控件。在客户端发生几个不同的 javascript 事件后,我需要将页面发回。
为了实现这一点,我在页面上创建了两个隐藏控件,以便我可以使用 javascript 设置它们的值、提交页面并在服务器端读取值。这是我用来创建这两个隐藏的代码:
Protected Overrides Sub CreateChildControls()
hdEventName = New HiddenField()
Controls.Add(hdEventName)
hdEventName.ID = "hdEventName"
hdEventArgs = New HiddenField()
Controls.Add(hdEventArgs)
hdEventArgs.ID = "hdEventValue"
' other controls
' ...
End Sub
当发生 javascript 事件时,我设置两个隐藏项的 value 属性并提交页面,如下所示:
hdEventName.value = 'EventName';
hdEventArgs.value = 'arg1,arg2';
document.forms[0].submit();
在我的控件的 OnLoad 方法中,我尝试检查 hdEventName 和 hdEventArgs 控件的 Value 属性,但它始终为空。但是, Page.Request.Form(hdEventName.UniqueID) 和 Page.Request.Form(hdEventArgs.UniqueID) 返回正确的值。页面回发后,标记中的实际 HTML 也会显示正确的值。
为什么 HtmlInputHiddens 的 Value 属性与客户端上显示的实际值断开连接?
更新 似乎在 OnLoad 发生后的某个时间从表单中加载了控件的属性。因此,我可以通过将检查两个隐藏字段的代码移动到 OnPreRender 方法中来解决我的问题,或者将以下方法添加到我的代码中 -
Private Sub Event_Handler(ByVal sender As Object, ByVal e As EventArgs)
Handles hdEventName.ValueChanged
' do stuff with hiddens
' ...
' reset the values back
hdEventName.Value = String.Empty
hdEventArgs.Value = String.Empty
End Sub