0

.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];私にそのエラーを与える

4

1 に答える 1

2

Web Pages 2 Validation ヘルパーは、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 を介してアップロードされたファイルの値を入力することもできます。次に、現在行おうとしているように新しい検証ヘルパーを使用できますが、代わりに隠しフィールドで使用できます。

于 2012-11-28T17:25:28.107 に答える