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