ASP.Net управления для выбора файла (не загружать)

1

Я хочу иметь элемент управления, который позволяет пользователю нажимать кнопку ссылки, открывается диалоговое окно файла, и пользователь выбирает файл. В настоящее время я использую элемент управления 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 управления FileUpload когда вы выбираете файл. В Page_Load он проверяет файл, как LinkButton ниже, и обновляет Text 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 Text установлено на полное имя файла.

Есть ли элемент управления, который позволяет это без накладных расходов на получение данных файла в запросе? И позволит вам выбирать файлы по разным акциям?

  • 0
    используйте jquery для этого простого отображения имени файла
  • 0
    Посмотрите на мой ответ. Надеюсь, вы получите то, что хотите.
Теги:
file-upload

2 ответа

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>
  • 0
    Это ближе всего к тому, что я ищу, но при выборе файла FileUpload управления FileUpload все еще FileUpload обратно на сервер. Это означает, что он все еще отправляет выбранный файл в качестве запроса, и если это большой файл, отправка назад может занять некоторое время. Какую проблему я изначально написал ... В обратном порядке ... В том смысле, что он работает для пользователей не на локальном сервере, но если вы попытаетесь получить к нему доступ с локального сервера, вы можете столкнуться с длительным ожиданием, пока файл "закачки". Есть ли способ остановить распространение поста назад?
  • 0
    @anothershrubery: можете ли вы сказать мне, когда это страница обратной передачи? потому что я не думаю, что при выборе файла, ваша страница получит сообщение обратно
Показать ещё 4 комментария
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);

    });
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню