Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > Файловый диалог


Автор: MSr00t 13.7.2007, 14:59
Есть кастом контрол, в котором объявляется метод, который задает  URL картинки для таблицы:

Код

public string AscImageUrl
{
       get { return ascImageUrl;}
       set { ascImageUrl = value;}
}



Как сделать так, чтобы при установке свойства появлялась кнопочка, при нажатии на которую выскакивал файловый диалог, как при нажатии, скажем, на BackImageUrl? Очень надо! Заранее спасибо! 

Автор: Wanderer2019 13.7.2007, 15:12
для этих целей существует стандартный контрол ASPX - FileUpload
или HTML вариант - <input type="file"/>

тебе навернео ASPX вариант проще использовать будет

Автор: MSr00t 13.7.2007, 16:02
Я новичек в ASP.NET. Может я чего и недопонял, но мне нужно не совсем это. Я создал custom control у которого есть куча изменяемых параметров. Среди них есть параметр "file name" - это путь к XML-файлу с данными. Мне необходимо, чтобы пользователь не вручную вводил URL файла, а имел возможность выбрать его в открывшемся диалоге.  К примеру в стандартном контроле "image" есть свойство "imageUrl".

Автор: Wanderer2019 13.7.2007, 16:41
нутк размещаешь на форме, там где ты будешь заставлять юзера выбирать этот XML, FileUpload компонент... после выбора какого либо файла путь к нему содержится в свойстве FileName этого контрола...

Автор: Mymik 13.7.2007, 18:44
Wanderer2019, проблема в том, что security всех известных и используемых браузеров запрещает принимать и устанавливать путь к файлам с помощью JS или приходить с сервера.
Потому для TopicStart'ера есть единственный выход: два элемента
Код

<input type="file" id="userfile" />
<input type="text" id="myFile" />

Первый контрол использовать для загрузки пользовательских файлов, а второй использовать для загрузки данных с его же сервера. Вообще луче всего предусмотреть еще какой-нибудь radiobutton для того чтобы переключаться между этими вариантами.

Автор: Wanderer2019 13.7.2007, 23:21
Цитата(Mymik @  13.7.2007,  18:44 Найти цитируемый пост)
Wanderer2019, проблема в том, что security всех известных и используемых браузеров запрещает принимать и устанавливать путь к файлам с помощью JS или приходить с сервера.


нука не понял.. расскажи ка по подробней??? может я чего то не понимаю, но у меня есть проект и там для подгрузки файлов с клиента используется именно FileUpload.... все вроде бы нормально работает... 
в чем там проблема то?

Автор: Mymik 14.7.2007, 11:01
у меня есть 
Код

<asp:FileUpload ID="fuTest" runat="server" />

Могу ли я ему как-то назначить значение по умолчанию ??? ну типа чтобы там сразу было написано C:\temp.txt ???  На сколько мне известно этого сделать нельзя по установленным правилам безопастности браузеров, дабы умные люди не крали файлы с пользовательского компьютера. (т.е. прописать для этого инпута display:none и записать туда адрес файла что тебе нужен.)
Ну и та же ситуация и для 
Код

<input type="file" it="tuTest" runat="server" />


А теперь подойдем с клиентской стороны, т.е. там мы можем использовать JS. Допустим фунцию
Код

function setFileName(fileUploadID)
{
    document.getElementById(fileUploadID).value = 'c:\temp.txt';
}

Данная функция не вызовет никаких изменений в нашем компоненте. Т.е. мы можем получать значение нашего компонента, но не можем его устанавливать.
Код

function getFileName(fileUploadID)
{
    alert(document.getElementById(fileUploadID).value);
}

функция написанная выше приведет к тому, что в MessageBox мы увидим текст который храниться в FileUpload(input type="file") поле.[add]Т.е. это прототип является readonly[/add]

Вывод: из вышесказанного делаем вывод, что установка значения для input обходя пользовательские "кривые" руки невозможно. 

P.S.  для настоящих извращенцев рекомендую ознакомиться с CSS position:absolute;. С помощью этого свойства можно немного усовершенствовать стандартный FileUpload путем установки дополнительного TextBox поверх FileUpload и установки перехвата onchange для FileUpload который будет вписывать значение хранимое в FileUpload в TextBox. Однако для того чтобы отчистить значение этого file тебе нужно использовать кнопку
Код

<input type="reset" />

А как известно всем и вся, эта кнопка уничтожает[add]сбразывает в default значение[/add] все введенные данные в пределах form где она определена.

Автор: Wanderer2019 14.7.2007, 12:20
Цитата(Mymik @  14.7.2007,  11:01 Найти цитируемый пост)
Могу ли я ему как-то назначить значение по умолчанию ??? ну типа чтобы там сразу было написано C:\temp.txt ???  На сколько мне известно этого сделать нельзя по установленным правилам безопастности браузеров, дабы умные люди не крали файлы с пользовательского компьютера. (т.е. прописать для этого инпута display:none и записать туда адрес файла что тебе нужен.)


а зачем это вообще нужно делать??? этот контрол предоставляет необходимый автору поста диалог и ничего более... для чего туда вносить значение по умолчанию? 

Автор: Mymik 14.7.2007, 13:47
Цитата(MSr00t @  13.7.2007,  16:02 Найти цитируемый пост)
Мне необходимо, чтобы пользователь не вручную вводил URL файла, а имел возможность выбрать его в открывшемся диалоге.
Wanderer2019, я так понял, что топикстартеру нужно чтобы он нажал на кнопочку вылетел список путей сгенерированных из xml, пользователь клачнул на него, и эти данные перекочевали в FileUpload (по вашим словам), но при этом, чтобы пользователь мог выбирать и свои изображения или я чего-то уже не понимаю...

Цитата(Wanderer2019 @  13.7.2007,  16:41 Найти цитируемый пост)
нутк размещаешь на форме, там где ты будешь заставлять юзера выбирать этот XML, FileUpload компонент... после выбора какого либо файла путь к нему содержится в свойстве FileName этого контрола... 
А тут вы говорите, что после выбора данных из xml, путь содержится в FileName, вообще это не так, потому как в fileUpload.FileName содержит только лишь имя файла, но не содержит логический путь к вайлу на пользовательском компьютере. Но это не столь важно, на много более важный вопрос как вы хотите засунуть данные из xml в FileUpload...

Автор: Wanderer2019 14.7.2007, 17:34
все же мне кажется, что афтар просто спросил как ему организовать диалог выбора файла с клиента, чтобы не вводить путь к файлу руками...

нуда ладно... думаю на поставленный вопрос он получил таки ответ =)

Автор: Idsa 17.7.2007, 23:23
Цитата(Mymik @  14.7.2007,  11:01 Найти цитируемый пост)
P.S.  для настоящих извращенцев рекомендую ознакомиться с CSS position:absolute;. С помощью этого свойства можно немного усовершенствовать стандартный FileUpload путем установки дополнительного TextBox поверх FileUpload и установки перехвата onchange для FileUpload который будет вписывать значение хранимое в FileUpload в TextBox.

Хм... Я не вижу смысла в таком подходе. Конечно, мы сможем 1. при загрузке отображать путь по умолчанию 2. при выборе нового пути отобразить и его. Однако, насколько я понимаю, проблема остается нерешенной, ведь путь по умолчанию мы никаким образом не сможем записать в FileUpload, а, следовательно, если пользователь не выберет файл (т. е. оставит файл по умолчанию), вопреки ожиданиям, ничего не будет загружено.

Автор: Mymik 18.7.2007, 08:29
в ходе дискуссии с Wanderer2019 мы пришли к обоюдному мнению, что топикстартеру не нужно значение по умолчанию так же как и все остальное. Вообще не плохо было б чтобы и топикстартер принимал участие, а то я так и не понял что ему нужно.


Цитата(Idsa @  17.7.2007,  23:23 Найти цитируемый пост)
1. при загрузке отображать путь по умолчанию

FileUpload никто и не видет и не должен видеть. Да и не форум хакеров тут чтобы рассказывать как воровать файлы с компьютера пользователей. 
Данный способ просто позволит в одной форме выбирать данные из интернета и данные с пользовательского компьютера.
С одной стороны когда он выбирает с помощью FileUpload (мы должны оставить такую функциональность) то мы выбранный файл (а точнее адрес к нему) копируем в TextBox с помощью JS. Если же он хочет вводить данные руками, то пускай это делает руками адрес в интернете.
Согласен что это довольно стремный способ по той причине, что пользователь может захотеть ввести адрес руками в FileUpload,- в этом случаи как обмануть систему пока что варианта у меня нет. Можно поискать в инете если это нужно будет. Но пока топикстартер молчит мне это не хочется делать.

Автор: MSr00t 18.7.2007, 13:10
Всем спасибо за участие, я нашел правильное решение. Мне всего лишь было необходимо, чтобы в закладке "properties" моего контрола в свойстве "FileName" была возможность выбирать URL необходимого файла в диалоге. Вот код:

Код


[Editor(typeof(System.Web.UI.Design.UrlEditor), typeof(System.Drawing.Design.UITypeEditor))]
public string FileName
{
       get { return fileName;}
       set { fileName = value;}
}



Тему можно считать закрытой.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)