File upload Webmatrix文件上载错误

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",

我正在尝试创建一个上载页面,在其中上载.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]
告诉我错误

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”修复了它。非常感谢。但现在我的验证有问题,所以即使提交了一个文件,我的验证也会说“请上传一个文件”。好的,谢谢,我认为这就是问题所在,只是我不知道如何修复它。