C# 上传文件脚本赢得';无法加载,因为它找不到函数bt1Clicked()

C# 上传文件脚本赢得';无法加载,因为它找不到函数bt1Clicked(),c#,asp.net,file-upload,C#,Asp.net,File Upload,我正试图让客户端在ASP.NET C#网站中将文件上载到我的服务器。我创建了一个简单的脚本,向自己介绍上传文件和创建一个脚本的细微差别,其中所有代码(HTML和C代码)都在同一个文件中 我的问题:当函数uploadFile()应该返回一个描述上传是否成功或失败原因的字符串时,它从不输出/返回任何字符串结果 我做错了什么 PS:我已经用以下代码更新了我的web.config: <appSettings> <add key="folderPath" value="uploaded

我正试图让客户端在ASP.NET C#网站中将文件上载到我的服务器。我创建了一个简单的脚本,向自己介绍上传文件和创建一个脚本的细微差别,其中所有代码(HTML和C代码)都在同一个文件中

我的问题:当函数
uploadFile()
应该返回一个描述上传是否成功或失败原因的字符串时,它从不输出/返回任何字符串结果

我做错了什么

PS:我已经用以下代码更新了我的web.config:

<appSettings>
 <add key="folderPath" value="uploadedFiles"></add>
</appSettings>

PPS:将我的C#代码和HTML全部放在同一个.aspx文件中有什么问题吗?把它们分开比较好吗

我的简单代码:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test.aspx.cs" Inherits="WebApplication1.test" %>

<!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></title>
    <script type="text/C#">
        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Web;
        using System.Web.UI;
        using System.Web.UI.WebControls;
        using System.Configuration;

        protected global::System.Web.UI.HtmlControls.HtmlInputFile fileUpload;
        protected global::System.Web.UI.WebControls.Label lblMessage;
        protected global::System.Web.UI.WebControls.Button btnSave;
        protected global::System.Web.UI.HtmlControls.HtmlGenericControl test;

        protected void bt1Clicked(Object sender, EventArgs e)
        {
            if (fileUpload.PostedFile != null)
            {
                string strFilename, strMessage;
                strFilename = fileUpload.PostedFile.FileName.ToString();
                strMessage = uploadFile(strFilename, ConfigurationManager.AppSettings["folderPath"]);
                output.InnerHtml = strMessage;
            }
        }

        public string uploadFile(string fileName, string folderName)
        {
            if (fileName == "")
            {
               return "Invalid filename supplied";
            }
            if (fileUpload.PostedFile.ContentLength == 0)
            {
                return "Invalid file content";
            }
            fileName = System.IO.Path.GetFileName(fileName);
            if (folderName == "")
            {
                return "Path not found";
            }
            try
            {
                if (fileUpload.PostedFile.ContentLength <= 2048000)
                {
                    fileUpload.PostedFile.SaveAs(Server.MapPath(folderName) + "\\" + fileName);
                    return "File uploaded successfully";
                }
                else
                {
                    return "Unable to upload,file exceeds maximum limit";
                }
            }
            catch (UnauthorizedAccessException ex)
            {
                return ex.Message + "Permission to upload file denied";
            }
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <input id="fileUpload" type="file" Runat="server" NAME="fileUpload"/>
        <asp:button id="btnSave" runat="server" Text="Upload File" OnClick="bt1Clicked"></asp:button>
        <p id="output" runat="server">Result should be displayed here after clicking</p>
    </div>
    </form>
</body>
</html>

使用制度;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.UI;
使用System.Web.UI.WebControl;
使用系统配置;
受保护的全局::System.Web.UI.HtmlControls.HtmlInputFile文件上载;
受保护的全局::System.Web.UI.WebControls.Label lblMessage;
受保护的全局::System.Web.UI.WebControls.Button btnSave;
受保护全局::System.Web.UI.HtmlControls.HtmlGenericControl测试;
已单击受保护的无效BT1(对象发送方、事件参数e)
{
if(fileUpload.PostedFile!=null)
{
字符串strFilename,strMessage;
strFilename=fileUpload.PostedFile.FileName.ToString();
strMessage=uploadFile(strFilename,ConfigurationManager.AppSettings[“folderPath]”);
output.InnerHtml=strMessage;
}
}
公共字符串上载文件(字符串文件名、字符串文件夹名)
{
如果(文件名==“”)
{
返回“提供的文件名无效”;
}
if(fileUpload.PostedFile.ContentLength==0)
{
返回“无效文件内容”;
}
fileName=System.IO.Path.GetFileName(文件名);
如果(folderName==“”)
{
返回“未找到路径”;
}
尝试
{

如果(fileUpload.PostedFile.ContentLength如果你想把你的C代码放在头版,你需要把它放在一个
标签里。当我这样做的时候(很少),我通常会把
标签放在HTML后面。例如:

<!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">
...
</html>
<script runat="server">
//Code here
</script>

...
//代码在这里
使用
的优点是,如果您正在编写Web应用程序(其中代码编译成dll),您可以创建运行服务器端的页面,而无需重新构建应用程序(当然,您必须从
@Page
指令中删除
codebeahind
属性)。因此,如果出于任何原因无法进行新构建,则在
.aspx
中一次性编写所有内容可能会很有用


也就是说,您最好在codebehind文件中编写代码(在您的示例中,这是
test.aspx.cs
,您可以在VS.NET中通过右键单击解决方案资源管理器中的
test.aspx
并选择“查看代码”或在查看
test.aspx
文件时按F7来访问它)。使用codebehind文件将代码与HTML分开,更重要的是,编译应用程序时会出现编译错误。如果使用
,则在访问页面之前不会出现编译错误。

回答您的PPS-是的,通常认为将C代码分开是最佳做法e文件。这有几个原因,我在这里为您列出几个:

  • 易于维护—将C#放在另一个文件中可以更方便地在以后修复或更改内容
  • 用户界面人员更容易使用-如果你与一位设计型人员一起工作,他正在处理你的HTML和CSS等,他们将更容易使用大部分HTML ASPX标记,而不会受到所有C#的阻碍
  • 预编译—如果您的C#代码位于单独的文件中,则可以将其预编译到DLL中,但如果它位于ASPX文件中,则需要IIS在其运行时对其进行编译
  • 可能还有很多其他原因我没有提到
  • 有些人可能会说,对于一个简单的测试/教程应用程序,您不需要太担心,但最好是在您进行教程等时实践最佳实践。因此,您以后对它并不陌生

    如果出于某种原因,您必须将其全部放在一个文件中,请采纳上面rsbarro的建议,并将其放在HTML下面的一个完全独立的块中,这样做既美观又干净