Asp.net mvc 4 您能告诉我如何使用fileupload(文件更新正常)在DB中进行更新吗?
您能告诉我如何使用fileupload(文件更新正常)在DB中进行更新吗 我没有收到任何错误消息,但是编辑控制器在DB中创建一个新行,而不是更新旧行 我试图删除insertOnsubmit,但唯一的结果是在DB中根本没有更新 我正在使用LINQ到SQL MVC4 表id-CompanyNameCon-PdfCon 控制器: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
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)