错误渲染控制 - WebUserControl,发生了未处理的异常

时间:2012-10-24 18:19:45

标签: asp.net windows visual-studio web-controls

我的代码有什么问题?视觉工作室不会收到任何警告或错误。

ASP.NET,错误渲染控制 - WebUserControl,发生了未处理的异常。

<%@ 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>

来自网络浏览器的错误消息:

    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

3 个答案:

答案 0 :(得分:2)

为什么UserControl有完整的HTML结构?只要在另一个页面中使用此控件,就会在另一个HTML文档中插入完整的HTML文档。仅包含呈现控件所需的html ...而不是整页

编辑 ..猜测我的措辞方式会更有意义作为评论而不是答案。所以...要回答问题....你的控件中有一个完整的html结构,所以当它在Webforms页面中使用时,你有框架试图在其中插入一个完整的html结构另一个。

只需要在你的.ascx中提供尽可能多的html来呈现控件....而不是整个html结构

答案 1 :(得分:2)

用户控件嵌入在页面内容中,因此它不应具有头部。只有你的实际页面应该有标题。

它也不应该包含任何其他文档部分,包括html,body等。

答案 2 :(得分:0)

您应将声明替换为:

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

或者你真的认为它是一个自定义控件你应该摆脱html和head标签。