0

我的代码有什么问题?Visual Studio 没有收到任何警告或错误。

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
4

3 回答 3

2

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

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

只放置尽可能多的 html,以在 .ascx 中呈现控件......而不是整个 html 结构

于 2012-10-24T18:28:12.810 回答
2

用户控件嵌入在页面的内容中,因此它不应该有 head 部分。只有您的实际页面应该有一个标题。

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

于 2012-10-24T18:31:14.673 回答
0

您应该将您的声明替换为:

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

或者你真的打算让它成为一个自定义控件,你应该摆脱 html 和 head 标签。

于 2012-10-24T18:25:04.230 回答