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

时间:2014-06-25 12:30:33

标签: c# asp.net file-upload

我希望有一个控件允许用户单击链接按钮,出现文件对话框并且用户选择文件。目前我正在使用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中,它会检查文件,并更新Text的{​​{1}}。我不需要实际的文件内容,只需要文件位置:

LinkButton

这在本地运行时工作正常。发布后,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属性设置为选定的完整文件名

是否存在允许此操作的控件而没有在请求中获取文件数据的开销?并允许您选择不同共享的文件吗?

2 个答案:

答案 0 :(得分:1)

如果您只想更改文字,为什么要回发页面?相反,您可以使用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>

答案 1 :(得分:0)

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

    });
});