C# 实体框架“;编辑";ActionResult保留或上传新的html文件输入,最初通过;创建;行动结果
我有一个带有视图的MVC5控制器,使用实体框架项目 我的项目模型有一个控制器和视图:C# 实体框架“;编辑";ActionResult保留或上传新的html文件输入,最初通过;创建;行动结果,c#,asp.net-mvc,entity-framework,file,input,C#,Asp.net Mvc,Entity Framework,File,Input,我有一个带有视图的MVC5控制器,使用实体框架项目 我的项目模型有一个控制器和视图: public partial class Item { public int ItemID { get; set; } public string ImageURL { get; set; } } 我更改了实体框架Create视图和控制器,以发布html文件输入,并将文件路径保存为ImageURL 视图中的代码段如下所示: @using (Html.BeginForm(null, null,
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>
}
[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>
@if(Model.ImageURL==null)
{
上传文件
@TextBox(“文件“,”,新的{type=“文件”})
}
其他的
{
/*在此处保留或上载新图像*/
}
我需要在该
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>
如果未上载特定项目的图像,您将如何编辑。您可以通过以下方法在单操作方法中创建和编辑这两个对象:
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();
如果单个图像有多个图像,您可以循环它谢谢,这是正确的答案。如果文件没有上传到编辑帖子上,我还需要允许null。如果(Request.Files.Count>0),您可以检查文件计数是否大于零。。
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();