Reputation: 860
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>
</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>
</td>
</tr>
<tr>
<td>
<hr />
</td>
<td>
</td>
</tr>
<tr>
<td>
<asp:Label id="UploadStatusLabel"
runat="server">
</asp:Label>
</td>
<td>
</td>
</tr>
</table>
</form>
<p>
</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
Upvotes: 0
Views: 11163
Reputation: 7703
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.
Upvotes: 2
Reputation: 5929
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
Upvotes: 2
Reputation: 3057
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.
Upvotes: 0