我是表单新手,正在尝试了解正在发生的事情。我看了很多问题和教程,但对某些点感到不清楚。
到目前为止,我已经在 aspx 页面中创建了以下表单:
<form id="uploadbanner" enctype="multipart/form-data" method="post" action="#">
<span class="txtSmallGrey fl" style="display:block; width:200px; margin:15px; margin-bottom:2px">
<%= oUtils.GetContentText("Collect_Config_upload_sound") %>
</span>
<input type="file" name="SoundFile" id="SoundFile" style="margin:15px; margin-bottom:2px">
<input type="submit" value="Upload" id="submit" style="float:left; margin-left:245px; margin-top:1px; height:20px;">
</form>
我在页面顶部有以下脚本:
<%
if(Request.Form["SoundFile"] != "")
{
HttpPostedFile file = Request.Files["SoundFile"];
string fname = Path.GetFileName(file.FileName);
file.SaveAs(Server.MapPath(Path.Combine("~/App_Data/", fname)));
}
%>
我对 AJAX 有一定的了解,因此其中一些内容对我来说似乎很熟悉。
现在解释一下我的理解:
该表单已声明并指定了“uploadbanner”的 id。当我传输文件时,我必须包含“enctype...”,我发布该文件是因为它更安全、更灵活。
操作术语告诉表单要发布到哪里。在本例中,我已将 C# 代码放在页面顶部,因此不需要包含 asp.net 页面地址来处理此问题。如果我这样做,我会包含一个 asp.net 页面,就像 AJAX 一样(我想?)。
表单标签内带有输入标签的任何内容都将发布在表单中,并将发送名称和值。
当按下提交按钮时,表单将被提交到服务器端代码进行处理。到目前为止,我觉得我明白发生了什么。
现在我感觉不太清楚的部分,
- 是不是当按下“提交”按钮时,C# 代码 页面顶部的将被激活,因此如果该字段是 空白它不会做任何事情吗?
- 如果多次按下按钮,表单会是 多次提交?
- 如果是这样,那么这与 AJAX 的方式非常相似?并且该文件将 只需传递给 C# 代码,我就可以在其中执行我需要的操作 是吗?
- 我的最后一个问题是,我可以使用替代方法提交表单吗? 提交按钮的方法,例如我可以制作一个普通的 JavaScript 按钮吗 并告诉它提交表单?
最佳答案
是否是这样,当按下“提交”按钮时,页面顶部的 C# 代码将被激活,因此如果该字段为空,则不会执行任何操作?
是的,每次加载页面时,它都会运行 C# 代码,人们会认为如果您提交表单,它就会检查发布的表单数据。最好检查 HTTP header 。
如果多次按下按钮,表单是否会被提交多次?
是的,表单将提交多次。
如果是这样,那么这与 AJAX 的方式非常相似?并且该文件将简单地传递给 C# 代码,我可以从那里用它来做我需要的事情?
它在 HTTP 请求的意义上类似,但您发布到带有附加文件的页面,然后 C# 通过运行 Request.Form 然后运行 Request.Files 和 Posts 到服务器来检查页面是否附加了文件.
我的最后一个问题是,我可以使用提交按钮的替代方法提交表单,例如我可以制作一个普通的 JavaScript 按钮并告诉它提交表单吗?
普通 JavaScript 按钮是什么意思?您不必使用提交按钮。只要您传入文件并加载页面,代码仍然会运行。当我发布到 HTTPHandler 时,我有方法。代码片段如下:
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
HttpPostedFile postedFile = context.Request.Files["Filedata"];
string filename = postedFile.FileName;
var Extension = filename.Substring(filename.LastIndexOf('.')
+ 1).ToLower();
string savepath =HttpContext.Current.Server.MapPath("/images/profile/");
postedFile.SaveAs(savepath + @"\" + user.uid + filename);
}
因此,当提交时,我指向 HttpHandler.ashx,它是一个实现 IHttpHandler 接口(interface)的类,它又获取当前上下文。
关于javascript - 使用 ASP.NET 和 C# 将文件上传到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28588937/