我正在尝试创建一个上传页面,我上传一个.swf文件,然后将文件名添加到我的数据库中。以前我已经能够实现这一点,但是,现在它似乎给我错误“索引超出范围。必须是非负的且小于集合的大小。参数名称:索引”我的代码如下:
@{
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];
给了我那个错误
答案 0 :(得分:2)
网页2验证助手不适用于input type="file"
。它们仅适用于Request.Form
集合中包含的元素。文件上传显示在Request.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将其值与文件上载的值一起填充。然后,您可以像当前一样尝试使用新的验证帮助程序,而是使用隐藏字段。