我试图让客户端在ASP.NET C#网站上将文件上传到我的服务器。我创建了一个简单的脚本来介绍上传文件和创建脚本的细微差别,其中所有代码(HTML和C#代码)都在同一个文件中。
我的问题:函数uploadFile()
从不输出/返回任何字符串结果,因为它应返回一个字符串,描述上传是否成功或失败的原因。
我做错了什么?
PS:我已使用以下代码更新了我的web.config:
<appSettings>
<add key="folderPath" value="uploadedFiles"></add>
</appSettings>
PPS:拥有我的C#代码&amp;是否有任何问题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>
答案 0 :(得分:1)
如果您要将C#代码放在首页,则需要将其放在<script runat="server">
标记中。当我这样做时(很少),我通常会在HTML之后放置<script>
标记。例如:
<!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>
使用<script runat="server">
的优点是,如果您正在编写Web应用程序(代码编译成dll),您可以创建运行服务器端的页面,而无需执行新的应用程序构建(当然您必须从CodeBehind
指令中删除@Page
属性。因此,如果您出现无论出于何种原因无法进行新构建的情况,那么在.aspx
中为一个页面编写所有内容都非常有用。
话虽这么说,你可能最好在代码隐藏文件中编写代码(在你的情况下这是test.aspx.cs
,你可以通过右键单击{{1}在VS.NET中找到它。在解决方案资源管理器中选择“查看代码”或在查看test.aspx
文件时按F7键。使用代码隐藏文件将代码与HTML分开,更重要的是,编译应用程序时将引发编译错误。如果使用test.aspx
,则在访问页面之前不会引发编译错误。
答案 1 :(得分:1)
回答您的PPS - 是的,一般来说,最好将C#代码放在一个单独的文件中。这有几个原因,我会在这里列出一些:
有些人可能会说,对于一个简单的测试/教程应用程序,您不必担心这么多,但是在进行教程等时最好实践最佳实践,因此以后对您来说似乎并不陌生。
如果由于某种原因你必须将它全部放在一个文件中,请按照上面的rsbarro建议把它放在HTML下面一个完全独立的块中,这样就很好又干净。