Solved

Can I call postback if a file has been added to the fileupload

Posted on 2008-10-15
8
525 Views
Last Modified: 2013-12-17
My code works when a drop downlist triggers postback on my page but the ddl is used before the fileupload. How can I call postback when a file has been browsed and put into the file upload. Or how could I do this differently? Basically I want to stop the user submiting the information they have inputted on my page if they have not attached the file. This is why I im making the button invisible if  the path is still present in the file upload. Any ideas would superb...thanks!
if (FileUploadControl.HasFile)
 {
  btnSubmit.Visible = false;
 }
 else
 {
  btnSubmit.Visible = true;
 }

Open in new window

0
Comment
Question by:dwezil
  • 4
  • 3
8 Comments
 
LVL 5

Expert Comment

by:johnaryan
ID: 22719650
2 ways of doing this
1. You could use javascript on the web page to verify that a file has been inputted.

2. Check the value of the FileUploadControlin the PageInit() event rather than the page load event.
function ValidateDisplayName()
{  
    if(document.all.FileUploadControl.value == "")
    {
        alert("You must select a file to upload before continuing.");
       return false; 
    }
    return true;  
}
 
 <input id="inputUploadFile" type="file" runat="server" size="50" onkeydown="return false;"
                                        onchange="ValidateDisplayName()" />

Open in new window

0
 
LVL 3

Expert Comment

by:sajain84
ID: 22719686
Hey!

What I gather is that you want to be informed when a file is selected or not.
The code you are using will not work because that gets fired only when there IS a postback.

You can do this using javascript.
You can detect whether a file has been selected or not by adding the following line of code on your Page_Load

Put the Submit button in a div and keep the div hidden by default.

Hope this helps. If not, ping me back.

// Put this on Page_Load
FileUpload1.Attributes.Add( "onchange", "return ShowButton()"); 
 
// Put this in the aspx page for the submit button
<div id="divButton" style="display:none">
<asp:Button ID="btnSubmit" runat="Server" Text="Submit">
</div>
 
// The javascript code which can toggle the button - Again needs to go in the aspx page
 
function ShowButton() {
var button = document.getElementById('divButton');
button.style.display = "";
}

Open in new window

0
 

Author Comment

by:dwezil
ID: 22719769
It doesnt like div button for some reason error is:

Too many characters in character literal

plus Ive put the java in my cs page because it wouldnt work in the aspx. You sure it goes there?

Thank you!
0
DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

 
LVL 3

Expert Comment

by:sajain84
ID: 22719986
Okay.
My code is as follows which I have tested to be working.

Please check it out and let me know if it helps.
You will need to modify your code to look like mine.

// The ASPX file
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="testjs.aspx.cs" Inherits="testjs" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
    
    <script type="text/javascript">
        function ShowButton() {
            var box = document.getElementById('divButton');
            box.style.display = "";
        }
            
    </script>
    
</head>
<body style="background-color:White">
    <form id="form1" runat="server">
    <div>
        <asp:FileUpload ID="fupDemo1" runat="server" />
        
        <div id="divButton" style="display:none">
            <asp:Button ID="btnDemo" runat="server" Text="Click me" />
        </div>
    </div>
    </form>
</body>
</html>
 
 
// The CODE BEHIND FILE
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
 
public partial class testjs : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        fupDemo1.Attributes.Add("onchange", "return ShowButton()");
    }
}

Open in new window

0
 

Author Comment

by:dwezil
ID: 22720580
Ok well that works but it does the opposite of what I want. If there is text in the box i want the button to be invisble. So when the file is attached and the text is cleared the button will appear. Plus I want the button there from load.

Thank you!
0
 
LVL 3

Accepted Solution

by:
sajain84 earned 500 total points
ID: 22720639
Oh. I'm sorry - I misunderstood your question.

You could just reverse the code in that case.
I've attached the corrected code snippet below.

Do let me know if you need some more help.

// The ASPX file
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="testjs.aspx.cs" Inherits="testjs" %>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
    
    <script type="text/javascript">
        function HideButton() {
            var box = document.getElementById('divButton');
            box.style.display = "none";
        }
            
    </script>
    
</head>
<body style="background-color:White">
    <form id="form1" runat="server">
    <div>
        <asp:FileUpload ID="fupDemo1" runat="server" />
        
        <div id="divButton" style="display:">
            <asp:Button ID="btnDemo" runat="server" Text="Click me" />
        </div>
    </div>
    </form>
</body>
</html>
 
 
// The CODE BEHIND FILE
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
 
public partial class testjs : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        fupDemo1.Attributes.Add("onchange", "return HideButton()");
    }
}

Open in new window

0
 

Author Comment

by:dwezil
ID: 22720683
Its all good I sorted it out. Thank you for you help
0
 

Author Comment

by:dwezil
ID: 22720696
Yeah i did the same as what youv'e just posted, cheers!
0

Featured Post

3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Welcome my friends to the second instalment and follow-up to our Minify and Concatenate Your Scripts and Stylesheets (http://www.experts-exchange.com/Programming/Languages/.NET/ASP.NET/A_4334-Minify-and-Concatenate-Your-Scripts-and-Stylesheets.html)…
Wouldn’t it be nice if you could test whether an element is contained in an array by using a Contains method just like the one available on List objects? Wouldn’t it be good if you could write code like this? (CODE) In .NET 3.5, this is possible…
This Micro Tutorial will give you a basic overview how to record your screen with Microsoft Expression Encoder. This program is still free and open for the public to download. This will be demonstrated using Microsoft Expression Encoder 4.
This Micro Tutorial demonstrates using Microsoft Excel pivot tables, how to reverse engineer competitors' marketing strategies through backlinks.

778 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question