#c# #asp.net #drop-down-menu
#c# #asp.net #выпадающее меню
Вопрос:
Я не могу получить ничего, кроме нулевого значения, из моего выпадающего списка, я пытаюсь загрузить файлы в разные каталоги…
public class dropDownInfo
{
public string pathName { get; set; }
public string pathValue { get; set; }
}
string uploadFolder = "";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// reference to directory
//DirectoryInfo di = new DirectoryInfo("//DOCSD9F1/TECHDOCS/");
DirectoryInfo di = new DirectoryInfo("D:/SMGUpload/SMGUpload/files/");
// create list of directories
List<dropDownInfo> DropDownList = new List<dropDownInfo>();
foreach (DirectoryInfo i in di.GetDirectories())
{
dropDownInfo ddInfo = new dropDownInfo();
ddInfo.pathName = i.FullName;
ddInfo.pathValue = i.FullName;
DropDownList.Add(ddInfo);
}
DropDownList1.DataSource = DropDownList;
DropDownList1.DataTextField = "pathName";
DropDownList1.DataValueField = "pathValue";
DropDownList1.DataBind();
}
}
protected void DropDownList1_IndexChanged(object sender, EventArgs e)
{
uploadFolder = DropDownList1.SelectedItem.Value;
}
protected void ASPxUploadControl1_FileUploadComplete(object sender, DevExpress.Web.ASPxUploadControl.FileUploadCompleteEventArgs e)
{
if (e.IsValid)
{
string uploadDirectory = Server.MapPath("~/files/");
//string uploadDirectory = @"\DOCSD9F1TECHDOCS";
string fileName = e.UploadedFile.FileName;
//string uploadFolder = DropDownList1.SelectedValue;
//string path = (uploadDirectory uploadFolder "/" fileName);
string path = Path.Combine(Path.Combine(uploadDirectory, uploadFolder), fileName);
e.UploadedFile.SaveAs(path);
e.CallbackData = fileName;
}
}
Комментарии:
1. и использование выпадающего списка 1.выбранный элемент.значение; выдает мне исключение ссылки.
2. @bluetickk не могли бы вы попробовать выпадающий список 1.Выбранное значение?
3. Можете ли вы показать разметку страницы для выпадающего списка 1?
4. <asp: идентификатор выпадающего списка=»Выпадающий список 1″ runat=»server» Width=»280px»></asp: выпадающий список>
5. Вы уверены, что «D:/SMGUpload/SMGUpload/files /» верно?. Если оно существует, вы ничего не получите обратно, если оно пустое.
Ответ №1:
Выполните проверку, прежде чем обращаться к Value
свойству.
if (DropDownList1.SelectedItem != null)
uploadFolder = DropDownList1.SelectedItem.Value;
Комментарии:
1. не объясняет, почему элементы имеют значение null =/
Ответ №2:
Выпадающий список не имеет значений после обратной передачи. Привязка выполняется только при первой загрузке страницы, затем страница публикуется обратно (индекс изменен), и элементы не привязываются повторно.
Комментарии:
1. Итак .. что мне нужно изменить?
Ответ №3:
У вас отключено viewstate на странице или в каком-либо из элементов управления? Это может вызвать проблему, которую вы описываете.
Кроме того, локальная переменная uploadFolder никогда не будет сохранена между обратными отправлениями. Вам нужно сохранить его в сеансе или где-нибудь на странице.
Session["uploadFolder"] = DropDownList1.SelectedItem.Value
Комментарии:
1. теперь это просто uploadfolder, значение которого равно нулю.. я поместил метку, чтобы подтвердить, что выпадающий список 1.selecteditem.text работает, и это так… но по какой-то причине моя папка загрузки отказывается принимать значение
2. Переменная ‘uploadFolder’ будет сбрасываться при каждой записи обратно. Вставьте его в сеанс или используйте выпадающий список 1.Выбранный элемент. Значение напрямую.
Ответ №4:
Вам нужно повторно установить источник данных в post back, но не привязывайте его повторно, иначе это также приведет к сбросу выбранного индекса.