从JavaScript中设置的HiddenField不会持久化

时间:2012-11-23 21:33:40

标签: c# asp.net .net

我有一个UserControl,其中包含在SharePoint解决方案中的ASPX页面上引用的HiddenField,UpLoad控件和DropDownList。控件的标记是:

<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" >

当为DropDownList更改选定的索引时,将调用javascript函数来设置HiddenField值。我还添加了一个警报来验证HiddenField是否包含值,它确实显示了预期值。这是功能:

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);
    }

从DropDownList中选择一个项目后,我看到函数调用并验证警报中的值是否正确。然后单击按钮选择要上载的文件,并触发UploadFinished事件。当我在UploadFinished事件中设置断点并检查HiddenField的值而不是它是预期值时,它是一个空字符串。

string sDocumentType = hdnDocumentType.Value;

如果我没有关闭页面并上传另一个文件,那么它就会在下拉列表中显示所选项目的值。如果我然后从下拉列表中选择另一个项目并上传另一个文件,则它具有先前的选择,然后在下一个文件上传下一个选择。因此,它是第一次出现空字符串,然后是我上传的每个文件后面的一个选择。

我不确定为什么价值不会持久存在,我正在寻找有关如何解决问题的建议。

1 个答案:

答案 0 :(得分:1)

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