如何将上传文件的路径添加到文本框中并将其存储在数据库中?

时间:2018-09-12 06:06:23

标签: c# asp.net-mvc entity-framework

我有一个在事件表中注册新事件的表单,在此表单中,我有一个上传按钮,用于上传文件并将其存储到名为Uploaded_Files的文件夹中。

一切正常,但是问题在于:

1)我希望报告文本框在上载文件时采用文件路径,以便我可以将该路径存储在数据库中。

2)另外,我如何上传多个文件并将其路径添加到其他文本框中,在我的示例中为image1和image2文本框。

这是我的模特

   public class events
{
    public int Id { get; set; }
    public string title { get; set; }
    public string report { get; set; }
    public string image1 { get; set; }
    public string image2 { get; set; }
}

这是我的控制者:

     //To Retrieve list of events//

     public ActionResult Index()
    {
        var evt = _context.evt;
        if (evt==null)
        {
            return Content("No events registered in database");
        }
        return View(evt);
    }


    //Registering new event//

    public ActionResult Add_New()
    {

        return View();
    }

    [HttpPost]
    public ActionResult Save(events e)
    {
        _context.evt.Add(e);
        _context.SaveChanges();
        return RedirectToAction("Index","Events");
    }


    // Creating Upload Button //

    [HttpPost]
    public ActionResult Add_New(HttpPostedFileBase file)
    {
        try
        {
            if (file.ContentLength > 0)
            {
                string filename = Path.GetFileName(file.FileName);
                string filepath = Path.Combine(Server.MapPath("~/Uploaded_Files"), filename);
                file.SaveAs(filepath);

            }
            ViewBag.Message = "Uploaded Successfully";
            return View();
        }
        catch
        {
            ViewBag.Message = "Not uploaded";
            return View();
        }

    }

这是视图:

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

     {


<div>
    @Html.TextBox("file", "", new { type = "file" })
    <input type="submit" value="submit" />
    @ViewBag.Message
</div>


  }


   @using (Html.BeginForm("Save", "events"))
  {
<div class="form-group">
    @Html.LabelFor(a => a.title)
    @Html.TextBoxFor(a => a.title, new { @class = "form-control" })
</div>
<div class="form-group">
    @Html.LabelFor(a => a.report)
    @Html.TextBoxFor(a => a.report, new { @class = "form-control" })
</div>
<div class="form-group">
    @Html.LabelFor(a => a.image1)
    @Html.TextBoxFor(a => a.image1, new { @class = "form-control"})
</div>
<div class="form-group">
    @Html.LabelFor(a => a.image2)
    @Html.TextBoxFor(a => a.image2, new { @class = "form-control" })
</div>
<button type="submit" class="btn btn-primary">Save</button>
}

我知道必须在表单或上载按钮之间的控制器或视图中合并某些内容,但我不知道如何重新编写更好的逻辑。

如果您在这方面有专长,请提供帮助。 谢谢

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找文件上传的完整路径。这受浏览器的限制,因为它可能会引起用户的隐私问题

https://weblogs.asp.net/ashicmahtab/fileupload-control-doesn-t-give-full-path-help

How can I get uploaded file full path in C# 3.0?