将图像路径提交到数据库

时间:2016-10-19 19:30:30

标签: asp.net-mvc entity-framework visual-studio-2015

我查看输入一些数据,然后将其保存到数据库表中,其他字段在提交到数据库时工作正常。但是当它保存图像路径时它会给出null。我在网上搜索过,我找到的所有内容都已过时,而且大部分内容都不起作用。

控制器

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Insert([Bind(Include ="id, ImageName, ImageSize")] ImageInfo info, HttpPostedFileBase ImagePath)
    {
        if(ModelState.IsValid)
        {
            if (ImagePath != null)
            {
                var filename = Path.GetFileName(ImagePath.FileName);
                var path = Path.Combine(Server.MapPath("~/Uploads"), filename);
                ImagePath.SaveAs(path); 

                ImagePath.SaveAs(HttpContext.Server.MapPath("~/Uploads") + ImagePath.FileName);
                info.ImagePath = ImagePath.FileName; 
            }
            db.ImageInfoes.Add(info);
            db.SaveChanges();
        return RedirectToAction("Index"); 
    }

        return View(info);
     }

查看

@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)

<fieldset>
    <legend>Image</legend>
    <div class="editor-label">
        <div class="form-horizontal">
            <hr />
            @Html.ValidationSummary(true, "", new { @class = "text-danger" })
            <div class="form-group">
                @Html.LabelFor(model => model.id, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.id, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.id, "", new { @class = "text-danger" })
                </div>
            </div>

            <div class="form-group">
                @Html.LabelFor(model => model.ImageName, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.ImageName, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.ImageName, "", new { @class = "text-danger" })
                </div>
            </div>

            <div class="form-group">
                @Html.LabelFor(model => model.ImageSize, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.ImageSize, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.ImageSize, "", new { @class = "text-danger" })
                </div>
            </div>
            <div class="form-group">
                @*@Html.TextBoxFor(model => model.ImagePath, new { type = "file" })*@
                <input type="file" name="ImagePath" id="ImagePath" />
                    @Html.ValidationMessageFor(model => model.ImagePath, "", new { @class = "text-danger" })
            </div>

            <div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    <input type="submit" value="Create" class="btn btn-default" />
                </div>
            </div>
        </div>
    </div>
</fieldset>

DB

enter image description here

任何帮助都会很棒!。

1 个答案:

答案 0 :(得分:2)

您想要将enctype="multipart/form-data"添加到表单标记中。

我个人想将 HttpPostedFileBase 参数名重命名为 文件 ,不要与 ImageInfo.ImagePath

视图

@using (Html.BeginForm("Index","Start",FormMethod.Post,new {enctype="multipart/form-data"}))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>Image</legend>
        <div class="editor-label">
            <div class="form-horizontal">
                <hr/>
                ...
                <div class="form-group">
                    @* Notice name and id are named as file *@
                    <input type="file" name="file" id="file"/>
                    @Html.ValidationMessageFor(model => model.ImagePath, "", new {@class = "text-danger"})
                </div>
                ...
            </div>
        </div>
    </fieldset>
}

模型

public class ImageInfo
{
    public string Id { get; set; }
    public string ImageName { get; set; }
    public string ImageSize { get; set; }
    public string ImagePath { get; set; }
}

行动方法

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index([Bind(Include = "id, ImageName, ImageSize")] ImageInfo info, 
  HttpPostedFileBase file)
{
    if (ModelState.IsValid)
    {
        if (file != null)
        {
            file.SaveAs(Server.MapPath("~/Uploads") + file.FileName);
            info.ImagePath = file.FileName;
        }
        /*db.ImageInfoes.Add(info);
        db.SaveChanges();*/
        return RedirectToAction("Index");
    }

    return View(info);
}