0

初めまして、初心者なので無知をお許しください…

私のテーブルには、UNC パスを PDF ファイルに保存する列があります。ユーザーがレコードに関連付けるファイルを参照して選択できるようにするボタンをビューに表示したいと思います。(舞台裏で、指定されたファイルの場所にファイルをコピーし、名前を変更します) ファイルを参照する方法の例をたくさん見つけましたが、これを Create で動作させる方法がわかりません。ビューを編集し、残りのデータをデータベースに保存します。

Create ビューで、BeginForm を次のように変更しました。

@using (Html.BeginForm("FileUploadCreate", "GL", FormMethod.Post, new { enctype = "multipart/form-data" }))

私が持っているPDFの場所を保存するための私の列のために:

@Html.TextBoxFor(Model => Model.PDF, null, new { type="file"})

私のコントローラーには次のものがあります:

        [HttpPost]
    public ActionResult FileUploadCreate(HttpPostedFileBase PDF)
    {
        string path = "";
        if (PDF != null)
        {
            if (PDF.ContentLength > 0)
                {
                    string fileName = Path.GetFileName(PDF.FileName);
                    string directory = "c:\\temp\\Accruals\\PDF";
                    path = Path.Combine(directory, fileName);
                    PDF.SaveAs(path);

                }
        }

        return RedirectToAction("Index");
    }

これはすべて正常に機能しており、ファイルは適切なテスト フォルダーにコピーされます。ただし、実際の Create 投稿がヒットしないため、レコードがデータベースに保存されることはありません。

        [HttpPost]
    public ActionResult Create(NonProject myRecord)
    {
        try
        {
            _repository.AddNonProject(myRecord);
            return RedirectToAction("Index");
        }
        catch
        {

            return View();
        }
    }

私は何をする必要がありますか?Create のように NonProject オブジェクトを参照するにはどうすればよいですか? これを FileUploadCreate にも渡すために、BeginForm に何かを追加できますか?

4

2 に答える 2

1

投稿されたファイルをパラメーターとしてCreateアクション メソッドに追加します。両方を保存します (ファイルをディスクに、フォームの値を DB に)

[HttpPost]
public ActionResult Create(NonProject myRecord, HttpPostedFileBase PDF)
{
    try
    {
        //Save PDF here            
       // Save form values to dB
    }
    catch
    {
        //Log error show the view with error message
         ModelState.AddModelError("","Some error occured");
        return View(myRecord);
    }
}

フォームアクションメソッドが に設定されていることを確認してください。Create

于 2013-05-29T18:36:18.537 に答える