我正在使用实体框架代码优先制作具有类别,品牌和产品实体的产品管理系统。在任何模型上执行CRUD操作时,通常需要上传和删除图像。
现在,我已将代码直接插入到类别控制器中。现在,在为Brands开发CRUD功能时,我意识到我需要在我的品牌控制器中复制相同的上传和删除代码。这将工作正常,但它只会复制品牌和产品控制器中的代码。
如何确保我编写代码一次,然后在需要的地方使用它。以下是代码,我正在谈论类别控制器:
[HttpPost]
public ActionResult Upload(HttpPostedFileBase fileData)
{
if (fileData != null && fileData.ContentLength > 0)
{
//var fileName = Server.MapPath("~/Content/Images/" + Path.GetFileName(fileData.FileName));
int pictureCount = 800000;
pictureCount += db.Pictures.Count();
string extension = Path.GetExtension(fileData.FileName);
string renamedImage = Server.MapPath("~/Content/Images/Categories/cat" + pictureCount + extension);
fileData.SaveAs(renamedImage);
return Json("/Content/Images/Categories/" + Path.GetFileName(renamedImage));
}
return Json(false);
}
[HttpPost]
public ActionResult Remove(string fileName)
{
string completFileName = Server.MapPath("~" + fileName);
System.IO.File.Delete(completFileName);
return Json(true);
}
答案 0 :(得分:0)
我认为最简单的方法是使用ActionFilterAttribute来装饰控制器方法。您将使用您发布的代码覆盖OnResultExecuting方法,然后将操作方法的签名更改为以下内容:
[UploadFile]
public ActionResult Upload(string file)
{
....
}
[RemoveFile]
public ActionResult Remove(string file)
{
....
}