实体框架编辑;ActionResult保存或上传新的html文件输入,通过"Create"Actio

本文关键字:quot 输入 文件 通过 html Actio Create ActionResult 编辑 框架 保存 | 更新日期: 2023-09-27 17:52:56

我有一个MVC 5控制器与视图,使用实体框架项目。

我有一个控制器和我的项目模型的视图:

public partial class Item
{
    public int ItemID { get; set; }
    public string ImageURL { get; set; }
}

我改变了实体框架Create视图和控制器,以发布html文件输入并将文件路径保存为ImageURL

视图中的代码片段如下所示:

@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" })) 
{
        <div class="form-group">
                <fieldset>
                    <legend>Upload a file</legend>
                    <div class="editor-field">
                        @Html.TextBox("file", "", new { type = "file" })
                    </div>
                </fieldset>
        </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>
}

控制器的Create ActionResult看起来像这样:

 [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "ItemID,ImageURL")] Item item, HttpPostedFileBase file)
        {
            try
            {
                if (ModelState.IsValid && file.ContentLength > 0)
                {
                    var fileName = Path.GetFileName(file.FileName);
                    var path = Path.Combine(Server.MapPath("~/Uploads"), fileName);
                    file.SaveAs(path);
                    item.ImageURL = "/Uploads/" + file.FileName;
                    db.Items.Add(item);
                    db.SaveChanges();
                }
                ViewBag.Message = "Upload successful";
                return RedirectToAction("Index");
            }
            catch
            {
                ViewBag.Message = "Upload failed";
                ViewBag.ItemTypeID = new SelectList(db.ItemTypes, "ItemTypeID", "ItemType1", item.ItemTypeID);
                return View(item);
            }
        }

你可以看到我用var fileName = Path.GetFileName(file.FileName);item.ImageURL = "/Uploads/" + file.FileName;填充我的ImageUrl。文件本身保存在服务器上。

现在我的问题是,我不知道如何获得"编辑"视图和ActionResult,以允许我保持相同的图像或上传新图像。

我该怎么做?

到目前为止,我所做的是在编辑视图中写入:

<div class="form-group">
    @if (Model.ImageURL == null)
    {
        <fieldset>
            <legend>Upload a file</legend>
            <div class="editor-field">
               @Html.TextBox("file", "", new { type = "file" })
            </div>
        </fieldset>
    }
    else
    {
        /*Keep or upload new image here*/
    }
</div>

我需要在else {...}和控制器的public ActionResult Edit(int? id) {...}中写些什么呢?

实体框架编辑;ActionResult保存或上传新的html文件输入,通过"Create"Actio

在img控件中显示图像,下面使用另一个文件控件,以防用户需要更改上传的图像。

<div class="form-group">
@if (Model.ImageURL == null)
{
    <fieldset>
        <legend>Upload a file</legend>
        <div class="editor-field">
            @Html.TextBox("file", "", new { type = "file" })
        </div>
    </fieldset>
}
else
{
    /*show Image  in an img control using image path*/
    <img src="@Model.ImageURL" height="100" width="100" />
    <fieldset>
        <legend>change the file</legend>
        <div class="editor-field">
            @Html.TextBox("file", "", new { type = "file" })
        </div>
    </fieldset>
}
</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>

和Action部分的一切都是一样的,删除旧文件并保存新文件并更新db。另外,不要忘记使用form,就像你在create视图中使用的那样。

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

如果图像未上传对于特定项目您将如何编辑。您可以通过

在单个操作方法中创建和编辑它们。
  var itemInDb = db.items
                .Where(c => c.itemid== id) // or whatever your key is
                .SingleOrDefault();
            if (itemInDb != null)
                db.Countries.ApplyCurrentValues(item);
            else
                db.Countries.AddObject(item);
  db.SaveChanges();

如果一个图像有多个图像你可以循环