C# 上传文件脚本赢得';无法加载,因为它找不到函数bt1Clicked()
我正试图让客户端在ASP.NET C#网站中将文件上载到我的服务器。我创建了一个简单的脚本,向自己介绍上传文件和创建一个脚本的细微差别,其中所有代码(HTML和C代码)都在同一个文件中 我的问题:当函数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
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下面的一个完全独立的块中,这样做既美观又干净