Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架“;编辑";ActionResult保留或上传新的html文件输入,最初通过;创建;行动结果_C#_Asp.net Mvc_Entity Framework_File_Input - Fatal编程技术网

C# 实体框架“;编辑";ActionResult保留或上传新的html文件输入,最初通过;创建;行动结果

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,

我有一个带有视图的MVC5控制器,使用实体框架项目

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

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();