C# JavaScript中的HiddenField集未持久化

C# JavaScript中的HiddenField集未持久化,c#,asp.net,.net,C#,Asp.net,.net,我有一个带有HiddenField、UpLoad控件和DropDownList的UserControl,它们在SharePoint解决方案中的ASPX页面上被引用。控件的标记为: <ig:WebDropDown ID="WebDropDownDocumentType" runat="server" Width="135px" DataSourceID="DataSourceDocumentType" DataKeyFields="Id" ValueField="Id" TextField=

我有一个带有HiddenField、UpLoad控件和DropDownList的UserControl,它们在SharePoint解决方案中的ASPX页面上被引用。控件的标记为:

<ig:WebDropDown ID="WebDropDownDocumentType" runat="server" Width="135px" DataSourceID="DataSourceDocumentType" DataKeyFields="Id" ValueField="Id" TextField="Name" AutoPostBack="False" ClientEvents-SelectionChanged="WebDropDownDocumentType_SelectionChanged">
<asp:HiddenField ID="hdnDocumentType" runat="server" />
<ig:WebUpload ID="WebUploadSupportingDocuments" runat="server" ProgressUrl="/WebUploadStatusHandler.ashx" Height="100px" MaxSimultaneousFilesUploads="1" Width="100px" OnUploadFinished="WebUploadSupportingDocuments_UploadFinished" AutoStartUpload="True" OnUploadStarting="WebUploadSupportingDocuments_UploadStarting" >
如果我没有关闭页面并上传另一个文件,那么它在下拉列表中具有所选项目的值。如果我从下拉列表中选择另一个项目并上载另一个文件,则它具有上一个选择,然后在下一个文件上载下一个选择。所以第一次是一个空字符串,然后我上传的每个文件后面都有一个选择


我不确定为什么该值没有持续存在,我正在寻找解决问题的建议。

问题的原因可能是上载组件。它可以使用iframe将文件上传到服务器(例如,从Ajax控制工具包异步上传文件和一些其他上传组件就是这样工作的)。这可能是为什么隐藏字段为空的问题的原因(因为请求是从iframe完成的)。如果这是您的情况,那么您需要处理客户端事件,该事件将在上载完成时通知您(当然,如果此组件支持它们),并手动执行回发(或ajax请求)以执行所需的操作。

IIRC这取决于您在页面生命周期中何时调用
hdnDocumentType.Value
Request.Form[hdnDocumentType.UniqueID]
是否为您提供了正确的值?我刚刚注意到的另一点是:如果我不关闭页面并上载另一个文件,那么它在下拉列表中就具有所选项目的值。如果我从下拉列表中选择另一个项目并上载另一个文件,则它具有上一个选择,然后在下一个文件上载下一个选择。所以第一次是一个空字符串,然后我上传的每个文件后面都有一个选择。
function WebDropDownDocumentType_SelectionChanged(sender, e) {
        var wddObject = sender, 
        selectedIndex = wddObject.get_selectedItemIndex(), value;
        value = wddObject.get_items().getItem(selectedIndex).get_value();
        document.getElementById('<%=hdnDocumentType.ClientID %>').value = value;       
        alert(document.getElementById('<%=hdnDocumentType.ClientID %>').value);
    }
string sDocumentType = hdnDocumentType.Value;