我有一个 UpdatePanel,里面是一个 FileUpload 控件。我知道人们对此有疑问,而且似乎大多数问题都源于尝试使用 AsyncPostBackTrigger。我已经接受了一般建议并使用了一个简单的 PostBackTrigger。这适用于 FireFox、Chrome 但不适用于 IE。
这是我的设置:
<asp:Panel runat="server" ID="Panel1" Width="100%">
<asp:UpdatePanel runat="server" ID="updRouteGroup" UpdateMode="Conditional">
<Triggers>
<asp:PostBackTrigger ControlID="btnOnHold"/>
</Triggers>
<ContentTemplate>
<asp:Panel ID="pnlImpExcel" runat="Server" >
<div style="width:100%">
<table colspan="0" width="100%" cellpadding="0" cellspacing="0" border="1">
<tr>
<th colspan="3">
On Hold Music
</th>
</tr>
<tr>
<td align="left" valign="middle" width="600px">
<input type="button" value="Browse" id="browse" class="button" /> Current File: <asp:Label runat="server" class="button" ID="lblOnHoldFile" />
</td>
<td align="right" valign="middle">
Enabled: <asp:CheckBox ID="cbOnHold" runat="server" />
<asp:FileUpload ID="filOnHold" runat="server" style="visibility:hidden;width:0px;" onChange="callme(this)"/>
<asp:Button ID="btnOnHold" runat="server" style="margin-right:7px;width:87px;" Text="Save" CssClass="button" OnClick="btnSaveOnHold_OnClick" />
</td>
</tr>
<tr><td colspan ="2" align="center"><asp:Label runat="server" ID="lblUploadError" style="color: Red;" Visible="false" /></td></tr>
</table>
</div>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
以及背后的代码:
protected void btnSaveOnHold_OnClick(object sender, EventArgs e)
{
//Misc unrelated stuff
if (filOnHold.HasFile)
{
//Process file, do other stuff
//However, this is ALWAYS FALSE.
}
//Misc unrelated stuff
}
这是js函数:
function callme(oFile) {
window.alert(oFile.value);
document.getElementById('<%= lblOnHoldFile.ClientID %>').innerText = oFile.value;
}
似乎我正在按照建议执行此操作,但 HasFile 总是错误的,即使我没有使用 AsyncPostBackTrigger。
有没有人遇到过这个?谢谢。