1

このコードを実行すると、null オブジェクト参照例外が発生します。ファイル HTML コントロールがあり、Razor コードは次のようになります。

@using (Html.BeginForm("AddFiles", "AdministerFiles", FormMethod.Post))
 {
    <p><label for="filename">Filename : </label><input type="text" name="filename" /></p>
    <p><label for="description">Description : </label><input type="text" name="description" /></p>
    <p><input type="file" name="file" id="file" /> </p>
    <p><input type="hidden" value="@Model[2]" name="catid"/></p>

    <input type="submit" value="Upload Now!" />
    <input type="reset" value="Reset" />
 }    

私のAdministerFilesControllerはこれです:

[HttpPost]
    public ActionResult AddFiles(HttpPostedFileBase file, int catid, string description)
    {
        // Verify that the user selected a file {
        if (file != null && file.ContentLength > 0)
        {
            // extract only the filename
            var filename = Path.GetFileName(file.FileName);
            // store the file inside ~/App_Data/Uploads folder
            var path = Path.Combine(Server.MapPath("~/App_Data/Uploads"), filename);
            file.SaveAs(path);
        }
        RefDataLinks_mst fileDetails = new RefDataLinks_mst()
        {
            LastModified = new DateTime(2012,1,1),
            CategoryID = catid,
            DataFileName = Path.GetFileName(file.FileName),
            DataTitle = "SAMPLETITLE",
            DataID = ((new Random()).Next(100, 1000)),
            DataFilePath = "Sample/Path",
            Description = description,
            UpdatedBy = "Arjel",
            FileSize = file.ContentLength
        };
        bool b = ServiceReferenceHelper.AddFile(fileDetails);
        // Redirect back to the index action to show the form once again
        return Redirect("AddFiles?catid=" + catid); //both works
        //return RedirectToAction("ViewDataFiles", new { catid = catid }); 
    }

catid および description からのデータは受信されますが、ファイルはヌル オブジェクトを参照しています。何が問題なのですか?

4

1 に答える 1

4

enctypeアップロードでは、実際にはフォームで属性を指定する必要があります。これを行う方法の例を次に示します。

@using (Html.BeginForm("AddFiles", "AdministerFiles", FormMethod.Post, 
    new { enctype = "multipart/form-data" }))
{ 
   ...
}
于 2012-06-13T02:54:31.570 に答える