skdeveloper
skdeveloper

Reputation: 107

Error Object reference not set when using UpdatePanel

I had this error " Object reference not set .... " , I had checked my code and I got that the error in UpdatePanel , when i removed it the code worked well but I must use it to prevent all page reload .

<div>
   <fieldset style="width: 498px; text-align: right; padding: 5px; direction: rtl;">
       <legend>what do y think ? </legend>
       <div class="add-post">
           <textarea class="textarea" cols="3" rows="3" runat="server" id="txpost"></textarea>
           <asp:RequiredFieldValidator ID="RVAddPost" runat="server" ForeColor="Red" ErrorMessage="*"
               ControlToValidate="txpost" ValidationGroup="AddUserPost">*</asp:RequiredFieldValidator>
       </div>
       <asp:UpdatePanel ID="UPAddUserPost" runat="server">
           <ContentTemplate>
               <div class="add-post-control">
                   <div class="post">
                       <asp:Button Text="Submit" runat="server" ID="btAddPost" OnClick="btAddPost_Click" ValidationGroup="AddUserPost" />
                   </div>
                   <div class="fileUpload btn btn-primary">
                       <div class="fileUpload btn btn-primary">
                           <span>
                               <img src="res/images/img.png" width="38" height="27" /></span>
                           <input type="file" runat="server" class="upload" id="FUFile" />
                       </div>
                   </div>
               </div>
           </ContentTemplate>
           <Triggers>
               <asp:AsyncPostBackTrigger ControlID="btAddPost" EventName="Click" />
           </Triggers>
       </asp:UpdatePanel>
   </fieldset>
   <script type="text/javascript">
       $('.textarea').focus(function () {
           $(this).animate({
               height: "80px"
           }, 500);
           $('.add-post-control').fadeIn(200);
       });
   </script>
</div>

Method:

protected void btAddPost_Click(object sender, EventArgs e)
{

    AddpostfromFront();
}
private void AddpostfromFront()
{
    if (FUFile.PostedFile.ContentLength != 0)
    {
        string tempVar = "~/res/Posts/" + FUFile.Value.ToString();
        FUFile.PostedFile.SaveAs(Server.MapPath(tempVar));
        ftier.Addpostfromfront(LoggedUserID, "4", txpost.Value, tempVar, DateTime.Now, DateTime.Now, false, false);
    }
}

Upvotes: 1

Views: 993

Answers (1)

Malachi
Malachi

Reputation: 3221

I think what you need to do instead of check the length of the file is to use a method that is built into PostedFile to check if there is a file to begin with.

if you look on the Microsoft page for PostedFile your code would look more like this

Private void AddpostfromFront()  //I don't like your naming on this, should be AddPostFromFront
{
    if (FUFile.HasFile)
    {
        string tempVar = "~/res/Posts/" + FUFile.Value.ToString();
        FUFile.SaveAs(tempVar);
    }
}

to use these methods you may have to use the ASP control instead of the HTML tag, <asp:FileUpload></asp:FileUpload> you will have to adjust the attributes to fit your situation and naming scheme. This would replace your HTML tag <input type="file" runat="server" class="upload" id="FUFile" />

I think that you are meshing two processes into one and getting confused as to what your code should be doing.


no clue what ftier is and why it has the same method name with the same bad naming scheme, or what it is doing with that information.


you should do this in 3 steps

  1. upload the file
  2. save the file
  3. if you need to display the file then do so with the file that is saved, not the file that is being uploaded.

Upvotes: 1

Related Questions