我有一个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) {...}
中写些什么呢?
在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();
如果一个图像有多个图像你可以循环