Question

What can be wrong with my code? The visual studio doesn't get any warnings or error.

ASP.NET, Error Rendering Control - WebUserControl, An unhandled exception has occurred.

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs"         Inherits="WebUserControl" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<script runat="server">

    protected void UploadButton_Click(object sender, EventArgs e)
    {
        // Specify the path on the server to
        // save the uploaded file to.
        String savePath = @"c:\temp\uploads\";

        // Before attempting to perform operations
        // on the file, verify that the FileUpload 
        // control contains a file.
        if (FileUpload1.HasFile)
        {
            // Get the name of the file to upload.
            String fileName = FileUpload1.FileName;

            // Append the name of the file to upload to the path.
            savePath += fileName;


            // Call the SaveAs method to save the 
            // uploaded file to the specified path.
            // This example does not perform all
            // the necessary error checking.               
            // If a file with the same name
            // already exists in the specified path,  
            // the uploaded file overwrites it.
            FileUpload1.SaveAs(savePath);

            // Notify the user of the name of the file
            // was saved under.
            UploadStatusLabel.Text = "Your file was saved as " + fileName;
        }
        else
        {
            // Notify the user that a file was not uploaded.
            UploadStatusLabel.Text = "You did not specify a file to upload.";
        }

    }

</script>

<html  >
<head id="Head1" runat="server">
    <title>FileUpload Example</title>
    <style type="text/css">
        .style1
        {
            width: 100%;
        }
        .style2
        {
            height: 26px;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <table class="style1">
        <tr>
            <td>
                Select a file to upload:</td>
            <td>
                &nbsp;</td>
        </tr>
        <tr>
            <td class="style2">

       <asp:FileUpload id="FileUpload1"                 
           runat="server">
       </asp:FileUpload>

            </td>
            <td class="style2">
            </td>
        </tr>
        <tr>
            <td>

       <asp:Button id="UploadButton" 
           Text="Upload file"
           OnClick="UploadButton_Click"
           runat="server">
       </asp:Button>    

            </td>
            <td>
                &nbsp;</td>
        </tr>
        <tr>
            <td>

       <hr />

            </td>
            <td>
                &nbsp;</td>
        </tr>
        <tr>
            <td>

       <asp:Label id="UploadStatusLabel"
           runat="server">
       </asp:Label>        
            </td>
            <td>
                &nbsp;</td>
        </tr>
    </table>
    </form>
    <p>
        &nbsp;</p>
</body>
</html>

Error message from web browser:

    Server Error in '/WebSite2' Application.
--------------------------------------------------------------------------------

You can only have one <head runat="server"> control on a page. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Web.HttpException: You can only have one <head runat="server"> control on a page.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.  

Stack Trace: 


[HttpException (0x80004005): You can only have one <head runat="server"> control on a page.]
   System.Web.UI.HtmlControls.HtmlHead.OnInit(EventArgs e) +1762795
   System.Web.UI.Control.InitRecursive(Control namingContainer) +333
   System.Web.UI.Control.InitRecursive(Control namingContainer) +210
   System.Web.UI.Control.InitRecursive(Control namingContainer) +210
   System.Web.UI.Control.AddedControl(Control control, Int32 index) +198
   System.Web.UI.ControlCollection.Add(Control child) +80
   System.Web.UI.WebControls.WebParts.WebPartManagerControlCollection.AddWebPartHelper(WebPart webPart) +220
   System.Web.UI.WebControls.WebParts.WebPartManagerControlCollection.AddWebPartsFromZone(WebPartZoneBase zone, WebPartCollection webParts) +607
   System.Web.UI.WebControls.WebParts.WebPartManager.RegisterZone(WebZone zone) +240
   System.Web.UI.WebControls.WebParts.WebZone.OnInit(EventArgs e) +95
   System.Web.UI.WebControls.WebParts.WebPartZone.OnInit(EventArgs e) +9
   System.Web.UI.Control.InitRecursive(Control namingContainer) +333
   System.Web.UI.Control.InitRecursive(Control namingContainer) +210
   System.Web.UI.Control.InitRecursive(Control namingContainer) +210
   System.Web.UI.Control.InitRecursive(Control namingContainer) +210
   System.Web.UI.Control.InitRecursive(Control namingContainer) +210
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +378
Was it helpful?

Solution

A usercontrol is embedded in the contents of a page, thus it shouldn't have a head section. only your actual page should have a header.

It also should not have any of the other document sections either including html, body, etc.

OTHER TIPS

Why do you have a full HTML structure for a UserControl? You're inserting a full HTML document within another one whenever you use this control in another page. Only include the html needed to render your control...not a whole page

EDIT .. guess the way I phrased that would have made more sense as a comment rather than an answer. So... to answer the question.... Your control has a full html structure in it, so when it's used in a Webforms page, you have the framework trying to insert an entire html structure within another.

Only put as much html as you need to render the control in your .ascx....not an entire html structure

You should replace your declaration to :

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>

Or you you really meant it to be a custom control you should get rid of the html and head tags.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top