0

首先,我是新手,所以请原谅我的无知...

在我的表中,我有一列我想将 UNC 路径存储到 PDF 文件。我想在我的视图上有一个按钮,允许用户浏览并选择要与记录关联的文件。(在幕后,我会将文件复制到指定的文件位置并重命名)我找到了很多关于如何浏览文件的示例,但我只是不知道如何让它在 Create and编辑视图并将其余数据保存回数据库。

在我的创建视图中,我已将 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");
    }

这一切正常,文件被复制到适当的测试文件夹。但是,我的记录永远不会保存到数据库中,因为我的实际创建帖子永远不会被击中:

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

            return View();
        }
    }

我需要做什么?如何在我的 Create 中引用我的 NonProject 对象?我可以在我的 BeginForm 中添加一些内容以将其传递给 FileUploadCreate 吗?

4

2 回答 2

1

将发布的文件作为参数添加到您的Create操作方法中。将两者都保存(文件到磁盘并将值保存到数据库)

[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 回答
0

您应该将所有数据发布到一个操作:

视图模型:

public class NonProject 
{
    public HttpPostedFileBase PDF{get;set;}

    public string SomeOtherProperty {get;set;}
    .....
}

看法:

@using (Html.BeginForm("FileUploadCreate", "GL", FormMethod.Post, new { enctype = "multipart/form-data" }))
{ 
    @Html.TextBoxFor(Model => Model.PDF, null, new { type="file"})

    @Html.TextBoxFor(Model => Model.SomeOtherProperty)

etc..
}

控制器:

[HttpPost]
public ActionResult FileUploadCreate(NonProject myRecord)
{
    string path = "";

    if (myRecord.PDF != null)
    {
        if (myRecord.PDF.ContentLength > 0)
            {
                string fileName = Path.GetFileName(myRecord.PDF.FileName);
                string directory = "c:\\temp\\Accruals\\PDF";
                path = Path.Combine(directory, fileName);
                myRecord.PDF.SaveAs(path);

            }
    }
    try
    {
        _repository.AddNonProject(myRecord);
        return RedirectToAction("Index");
    }
    catch
    {

        return View();
    }


    return RedirectToAction("Index");
}
于 2013-05-29T18:42:11.923 回答