Свойство FileUpload.HasFile всегда ложно, тогда как выгрузка файла находится внутри GridView. - PullRequest
0 голосов
/ 06 декабря 2011

У меня есть Tab Container, и у меня внутри GridView.Мне нужно загрузить изображение, пока я нажимаю на конкретную строку.Я также использую панель обновлений, за пределами сетки, я смог загрузить изображение, используя PostBack Trigger для «кнопки предварительного просмотра», но внутри gridview я не знаю, как получить к нему доступ.Я только что создал одну кнопку с именем btngrvPreview вне gridview и вызвал ее событие click для кнопки btnPreview1, которая находится внутри gridView.Я думаю, что этот подход является правильным только .. Но я не знаю, почему этот триггер для btnPreview1 не работает.

Показывает, что условие (vFile.HasFile) всегда становится ложным ..

Справкамне решить эту проблему.

GridView

 <asp:GridView ID="grvItem" runat="server" AutoGenerateColumns="False" OnRowDataBound="grvItem_RowDataBound"                                                ShowFooter="True" SkinID="grid" Width="100%">  
    <Columns>                 
    <asp:BoundField HeaderText="Reference&nbsp;ID" />
    <asp:TemplateField HeaderText="Design">
<ItemTemplate>
<asp:Label ID="grvlbldesign" runat="server" CssClass="lbl">
    </asp:Label>
    </ItemTemplate>                 
    </asp:TemplateField>     
<asp:TemplateField HeaderText="Upload Image">
    <ItemTemplate>
<asp:HiddenField ID="hifgrvImage" runat="server" />
    <a ID="grvuploadimgPopup" runat="server">
    <asp:Image ID="grvUploadImage" runat="server" Width="90px" />
    </a>                                                                                 </ItemTemplate>             
    <EditItemTemplate>                                                                   
    <asp:FileUpload ID="fupImage1" runat="server" CssClass="fileuploadbtn" TabIndex="5" ToolTip="Browse For Image" Width="152px"/>         
    <asp:ImageButton ID="btnPreview1" runat="server" ImageUrl="~/images/view.gif" TabIndex="5" ToolTip="Preview" onclick="btngrvPreview_Click"/>
  </EditItemTemplate>                                                                        
</asp:TemplateField>     
    <Triggers>
    <asp:PostBackTrigger ControlID="btngrvPreview" />                   
    </Triggers>

Нажатие кнопки EVent

protected void btnPreview1_Click(object sender, ImageClickEventArgs e)
 {
  try
     {
            int rowIndex = Convert.ToInt32(hifRecordID.Value);
            Image vimgView = (Image)grvItem.Rows[rowIndex].FindControl("grvUploadImage");
            System.Web.UI.WebControls.FileUpload vFile = (System.Web.UI.WebControls.FileUpload)grvItem.Rows[rowIndex].FindControl("fupImage1");

            string strimage;
            string strfilename, strextn;
            if (vFile.HasFile)
            {
                System.IO.Path.GetExtension(vFile.FileName);
                string strfileExtension = System.IO.Path.GetExtension(vFile.FileName).ToLower();
                string[] strAllowedFileExtensions = { ".gif", ".jpeg" };
                if (strfileExtension == ".jpeg")
                    strfileExtension = ".gif";
                if (FileExtensionIsApproved(strfileExtension) == true)
                {
                    strfilename = System.IO.Path.GetFileName(vFile.PostedFile.FileName);
                    strextn = System.IO.Path.GetExtension(strfilename);
                    strimage = ObjDataAccess.LoginName + "_" + DateTime.Now.ToString("yyyyMMddHHmmssfffffff") + strextn;
                    ViewState["Filename"] = strimage;
                    string strpath = ConfigurationManager.AppSettings["ITEMPHOTO"] + strimage;
                    //Server.MapPath("empphoto") + "\\" + strimage;

                    vFile.PostedFile.SaveAs(strpath);
                    if (hifimgbrowser.Value == "IE")
                    {
                        vimgView.ImageUrl = strpath;
                        // tstimg.HRef = vimgView.ImageUrl;
                    }
                    else
                    {
                        vimgView.ImageUrl = "~/Handler.ashx?id=" + strpath;
                        // tstimg.HRef = imgView.ImageUrl;
                    }
                    vimgView.Visible = true;
                    System.IO.Stream fs = vFile.PostedFile.InputStream;
                    byte[] bytMyData = new byte[fs.Length + 1];
                    fs.Read(bytMyData, 0, Convert.ToInt32(fs.Length));
                    fs.Close();
                }
                else
                {
                    // DeleteImageFile();
                    vimgView.ImageUrl = "";
                    //  tstimg.HRef = "";
                    vimgView.Visible = true;
                }
            }
        }
        catch (Exception ex)
        {
            strMsg = ex.Message;
            ScriptManager.RegisterStartupScript(Page, this.GetType(), "alertScript", "showMsgbox('" + strMsg + "','','2','');", true);
        }
    }

Заранее спасибо.

1 Ответ

0 голосов
/ 06 декабря 2011

вы можете отладить и убедиться, что метод findcontrol не возвращает ноль, а также вы помещаете элемент управления fileupload в EditTemplate, поэтому вы должны проверить таким образом в событиях GridView _PreRender

if (this.GridView1.EditIndex != -1)
   {
     FileUpload upload = GridView1.Rows[GridView1.EditIndex].FindControl("fupImage1") as Button;
     if (upload != null)
      {
      //do something
      }
   }

может бытьэто поможет вам ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...