【问题标题】:Text Input from Drop Down list is ignored in Ajax Control Upload and takes default value all the time来自下拉列表的文本输入在 Ajax 控件上传中被忽略并始终采用默认值
【发布时间】:2014-03-26 05:53:12
【问题描述】:

我的网页有一个 ajax 控件上传事件,用于上传 zip 文件并通过基于下拉列表输入创建文件夹名称来解压缩 (zlib) zip 文件夹。面临的问题是当我的网页加载为 CEESI 时的默认值,并且每次都将其作为下拉列表输入。如果从 ajax 上传下拉列表中选择了任何其他选项,则它不会采用所选输入来创建文件夹名称,并且无法解压缩我的文件,因为错误表明路径不存在。 上传和解压缩仅适用于默认下拉列表输入,即 c

我的 Aspx 源代码

<asp:DropDownList ID="DropDownList1" runat="server" Font-Size="Smaller">
                                <asp:ListItem>c</asp:ListItem>
                                <asp:ListItem>n</asp:ListItem>
                                <asp:ListItem>h</asp:ListItem>
                                <asp:ListItem>f</asp:ListItem>
                                <asp:ListItem>ce</asp:ListItem>
                                <asp:ListItem>si</asp:ListItem>
                            </asp:DropDownList>

我的 C# 代码 (aspx.cs)

protected void UploadComplete(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs e)
{
  string path_with_file_name = null;
  try
     {
      _path = Server.MapPath("~/App_data" + "/" + get_user_data(1) + "/" + DropDownList1.Text +    "/"); 
      **//How to retrieve selected drop down list input for Ajax Upload** 
       bool isExists = System.IO.Directory.Exists(_path);
       if (!isExists)
       System.IO.Directory.CreateDirectory(_path);
       path_with_file_name = _path + e.FileName;
       AjaxFileUpload1.SaveAs(Path.Combine(_path, e.FileName));
     }
  catch (UnauthorizedAccessException Uae)
     {
       throw Uae;
     }
       UnZipper uz = new UnZipper();
       uz.Destination = _path;
       uz.IfFileExist = enIfFileExist.Overwrite;
       uz.ItemList.Add("*.*");
       uz.Recurse = true;
       uz.ZipFile = @path_with_file_name;
       uz.UnZip();
    }

【问题讨论】:

    标签: c# javascript asp.net ajax zlib


    【解决方案1】:

    您可以将选定的项目文本存储到会话状态并从那里读取。

    但首先将 OnSelectedItemChanged 事件添加到您的下拉列表并设置 AutoPostBack=true。

    这个链接解决了你的问题:http://forums.asp.net/post/5162366.aspx

    编辑:

    如果用户没有更改下拉列表的值,您需要将 UploadComplete 方法修改为以下内容:

     protected void UploadComplete(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs e)
        {
            String value;
            if(Session["Value"] != null)
            {
                 value = Session["Value"].ToString();
            }
            else
            {
                 value = DropDownList1.SelectedItem.Text;
            } 
            //rest of your code
        }
    

    您可以像这样在下拉列表中设置默认选择的列表项:

    <asp:DropDownList ID="DropDownList1" runat="server" Font-Size="Smaller">
                                    <asp:ListItem Selected="True" >CEESI</asp:ListItem>
                                    <asp:ListItem>NEL</asp:ListItem>
                                    <asp:ListItem>HORSOY</asp:ListItem>
                                    <asp:ListItem>FLATOY</asp:ListItem>
                                    <asp:ListItem>CEPRO</asp:ListItem>
                                    <asp:ListItem>SINTEF</asp:ListItem>
                                </asp:DropDownList>
    

    【讨论】:

    • @ Jack Kokah - 现在,如果用户没有触摸下拉列表,它会抛出一个异常,即对象引用未设置为对象的实例。即如果下拉列表中的默认值是 CEESI 并且用户 dint 想要更改怎么办。我应该添加 if(!IsPostback) 如何继续
    猜你喜欢
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多