在Create View MVC4中浏览文件

时间:2013-05-29 18:30:59

标签: c# asp.net-mvc-4 razor

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

在我的表中,我有一个列,我想将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");
    }

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

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

            return View();
        }
    }

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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");
}