File upload Webmatrix文件上载错误
我正在尝试创建一个上载页面,在其中上载.swf文件,然后将文件名添加到数据库中。以前我已经能够做到这一点,但是,现在它似乎给了我错误“索引超出范围。必须是非负的并且小于集合的大小。参数名称:索引”我的代码如下:File upload Webmatrix文件上载错误,file-upload,razor,webmatrix,File Upload,Razor,Webmatrix,我正在尝试创建一个上载页面,在其中上载.swf文件,然后将文件名添加到数据库中。以前我已经能够做到这一点,但是,现在它似乎给了我错误“索引超出范围。必须是非负的并且小于集合的大小。参数名称:索引”我的代码如下: @{ Page.Title = "Add Game"; //Variables var GameName = ""; var Tags = ""; var Gamefile = ""; //Required fields Validation.RequireField("Name",
@{
Page.Title = "Add Game";
//Variables
var GameName = "";
var Tags = "";
var Gamefile = "";
//Required fields
Validation.RequireField("Name", "Please give the game a name.");
Validation.RequireField("file", "Please upload a file.");
//Maximum name length
Validation.Add("Name",
Validator.StringLength(
maxLength: 100,
errorMessage: "Name must be less than 100 characters")
);
//SWF file validation
Validation.Add("file",
Validator.Regex(@"^.*\.(swf|SWF)$", "Invalid filetype, you must upload a .swf flash file")
);
if (IsPost && Validation.IsValid()) {
var db = Database.Open("Surgestuff");
var gCat = "";
var fileData = Request.Files[0];
var fileName = Guid.NewGuid().ToString() + ".swf";
var fileSavePath = Server.MapPath("~/upload/" + fileName);
var AddBy = WebSecurity.CurrentUserName;
gCat=Request["formCat"];
Gamefile = fileName;
fileData.SaveAs(fileSavePath);
var SQLINSERT = "INSERT INTO Games (Name, file_path, Category, AddBy) " + "VALUES (@0, @1, @2, @3)";
db.Execute(SQLINSERT, GameName, Gamefile, gCat, AddBy);
Response.Redirect("~/Games");
}
}
出于某种原因,即使我提交了一份文件
var fileData=Request.Files[0]
告诉我错误Web Pages 2验证帮助程序不能与输入类型=“文件”
一起使用。它们仅适用于Request.Form
集合中包含的元素。文件上载显示在请求.Files
集合中
有几种方法可以用来验证文件上传。您可以使用ModelState:
if(IsPost && Request.Files[0].ContentLength == 0){
ModelState.AddError("file", "You must choose a file");
}
if (IsPost && Validation.IsValid() && ModelState.IsValid) {
// etc
或者,您可以添加一个隐藏字段,在提交表单时,通过JavaScript将其值填充为文件上载的值。然后,您可以像当前尝试的那样使用新的验证帮助程序,但改为使用隐藏字段。表单的代码将非常有用。您还没有从表单本身删除enctype属性,是吗?啊,是的,添加enctype=“multipart/form data”修复了它。非常感谢。但现在我的验证有问题,所以即使提交了一个文件,我的验证也会说“请上传一个文件”。好的,谢谢,我认为这就是问题所在,只是我不知道如何修复它。