Asp.net mvc 4 您能告诉我如何使用fileupload(文件更新正常)在DB中进行更新吗?

Asp.net mvc 4 您能告诉我如何使用fileupload(文件更新正常)在DB中进行更新吗?,asp.net-mvc-4,file-upload,Asp.net Mvc 4,File Upload,您能告诉我如何使用fileupload(文件更新正常)在DB中进行更新吗 我没有收到任何错误消息,但是编辑控制器在DB中创建一个新行,而不是更新旧行 我试图删除insertOnsubmit,但唯一的结果是在DB中根本没有更新 我正在使用LINQ到SQL MVC4 表id-CompanyNameCon-PdfCon 控制器: public ActionResult Edit(int id = 0) { DAT_SupplyCon SupplyCon = db.DAT

您能告诉我如何使用fileupload(文件更新正常)在DB中进行更新吗

我没有收到任何错误消息,但是编辑控制器在DB中创建一个新行,而不是更新旧行

我试图删除insertOnsubmit,但唯一的结果是在DB中根本没有更新

我正在使用LINQ到SQL MVC4

表id-CompanyNameCon-PdfCon

控制器:

    public ActionResult Edit(int id = 0)
    {
        DAT_SupplyCon SupplyCon = db.DAT_SupplyCons.Where(x => x.ID == id).FirstOrDefault();
        if (SupplyCon == null)
        {
            return HttpNotFound();
        }
        return View(SupplyCon);
    }

    //
    // POST: /Books/Edit/5
    [HttpPost]
    public ActionResult Edit(DAT_SupplyCon DAT_SupplyCon, HttpPostedFileBase file)
    {
        if (ModelState.IsValid)
        {
            // Delete old file
            FileUpload.DeleteFile(DAT_SupplyCon.PdfCon);



            // Upload our file
            DAT_SupplyCon.PdfCon = FileUpload.UploadFile(file);
  ????      db.DAT_SupplyCons.InsertOnSubmit(DAT_SupplyCon);
            db.SubmitChanges();
            return RedirectToAction("Index");
        }
        return View(DAT_SupplyCon);
    }
看法


将主键属性的隐藏字段添加到表单中

@Html.HiddenFor(model => model.ID)

否则它将被视为新记录,因为没有发布主键。

InsertOnSubmit方法基于主键工作。 若数据库中不存在主键值,它将创建一个新记录,否则将更新该记录

在您的情况下,可以使用隐藏字段将主键id存储到模型中。
@Html.HiddenFor(model=>model.PrimaryKeyID)

Hi Atul,我已经创建了一个编辑视图,正如您所建议的,但它仍然生成一个新行,带有一个新的主键。我还制作了一个编辑视图,其中主视图没有隐藏。当视图打开时,它是旧的ID,但当我点击“保存”时,它会用一个新的IDHi dombenoit生成一个新行,我已经创建了一个编辑视图,正如您所建议的,但它仍然会生成一个新行,带有一个新的主键。我还制作了一个编辑视图,其中主视图没有隐藏。当视图打开时,它是旧ID,但当我点击“保存”时,它会用一个新ID生成一个新行,这可能是因为您的代码正在执行插入:
db.DAT\u SupplyCon.InsertOnSubmit(DAT\u SupplyCon)。您需要将其更改为:
db.Entry(DAT\u SupplyCon).State=EntityState.Modified.Hi再次,它将不接受条目(我认为与LINQ to SQL一起)错误“条目”没有定义
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;


namespace CFire2.Utils
{
public static class FileUpload
{

public static char DirSeparator =
System.IO.Path.DirectorySeparatorChar;
public static string FilesPath = "Content" +
DirSeparator + "Uploads" + DirSeparator;
public static string UploadFile(HttpPostedFileBase file)
{

   if (null == file) return "";

   if (!(file.ContentLength > 0)) return "";
   string fileName = file.FileName;
   string fileExt = Path.GetExtension(file.FileName);


   if (null == fileExt) return "";

   if (!Directory.Exists(FilesPath))
   {

      Directory.CreateDirectory(FilesPath);
   }

     var path = Path.Combine(HttpContext.Current.Server.MapPath("~/Content/SupplyCon"),fileName);

   file.SaveAs(Path);

   return fileName;
}
public static void DeleteFile(string fileName)
{

   if (fileName.Length == 0) return;

   var path = Path.Combine(HttpContext.Current.Server.MapPath("~/Content/SupplyCon"), fileName);

   if (File.Exists(Path.GetFullPath(path)))
   {

       File.Delete(Path.GetFullPath(path));
   }
}
}
}
@Html.HiddenFor(model => model.ID)