ASP.Net控件来选择文件(不上载)

本文关键字:上载 文件 选择 Net 控件 ASP | 更新日期: 2023-09-27 18:10:09

我想要一个控件,允许用户单击链接按钮,出现一个文件对话框,用户选择一个文件。目前我正在使用FileUpload控件,如下所示:

<asp:LinkButton ID="btnDocumentLocation" runat="server" CausesValidation="False">Please Select...</asp:LinkButton>
<asp:FileUpload ID="fuDocumentLocation" style="display:none;" runat="server" ClientIDMode="AutoID" />

在我在Page_Load:中的代码中

btnDocumentLocation.OnClientClick = "$('[id*='"" + fuDocumentLocation.ClientID + "'"]').click();";

这将启动(隐藏的(FileUpload控件,您可以在其中选择文件。在Page_Load中,它如下检查文件并更新LinkButtonText。我不需要实际的文件内容,只需要文件位置:

if (IsPostBack && fuDocumentLocation.PostedFile != null && fuDocumentLocation.PostedFile.FileName.Length > 0)
{
    btnDocumentLocation.Text = fuDocumentLocation.PostedFile.FileName;
}
else
{
    btnDocumentLocation.Text = "";
}

当在本地运行时,这一切都很好。发布时,FileUpload似乎在"上传"部分存在问题。它不会返回到服务器,因此无法运行Page_Load代码来填充btnDocumentLocation.Text属性。我不需要它来获取文件,我只需要文件的位置。

我需要按顺序进行的操作:

  • 用户点击LinkButton
  • 弹出文件对话框
  • 用户选择文件
  • LinkButton Text属性设置为选定的完整文件名

是否有一种控件可以在不需要获取请求中的文件数据的开销的情况下实现这一点?是否允许您跨不同共享选择文件?

ASP.Net控件来选择文件(不上载)

如果只想更改文本,为什么要回发页面?相反,您可以使用Jquery/Javascript在不回发的情况下实现同样的效果,如下所述:

<asp:LinkButton runat="server" ID="btnDocumentLocation" OnClientClick="return GetFile();" >Browse...</asp:LinkButton>
<asp:FileUpload runat="server" ID="fuDocumentLocation" OnChange="ChangeText(this.value);" style="display: none" />

<script type="text/javascript">
    function ChangeText(selectedPath) {
        $('#' + '<%=btnDocumentLocation.ClientID%>').text(selectedPath);
    }
    function GetFile() {
        $('#' + '<%=fuDocumentLocation.ClientID%>').click();
        return false;
    }
</script>

如果您想使用Pure JQuery,那么:

<asp:LinkButton runat="server" ID="btnDocumentLocation"  >Browse...</asp:LinkButton>
<asp:FileUpload runat="server" ID="fuDocumentLocation"  style="display: none" />

<script type="text/javascript">
    $(document).ready(function() {
        $('#' + '<%=btnDocumentLocation.ClientID%>').click(function () {
            $('#' + '<%=fuDocumentLocation.ClientID%>').click();
            return false;
        });
        $('#' + '<%=fuDocumentLocation.ClientID%>').change(function () {
            var selectedPath = $('#' + '<%=fuDocumentLocation.ClientID%>').val();
            $('#' + '<%=btnDocumentLocation.ClientID%>').text(selectedPath);
        });
    });
</script>
<asp:LinkButton runat="server" ID="btnDocumentLocation"  >Browse...</asp:LinkButton>
<asp:FileUpload runat="server" ID="fuDocumentLocation"  style="display: none" />

<script type="text/javascript">
$(document).ready(function() {
    $('#' + '<%=btnDocumentLocation.ClientID%>').click(function () {
        $('#' + '<%=fuDocumentLocation.ClientID%>').click();
        return false;
    });
    $('#' + '<%=fuDocumentLocation.ClientID%>').change(function () {
        var selectedPath = $('#' + '<%=fuDocumentLocation.ClientID%>').val();
        $('#' + '<%=btnDocumentLocation.ClientID%>').text(selectedPath);
    });
});