2017-03-23 109 views
0

在Asp.net MVC中已经有一个正常的CRUD脚手架,但我使用自己的代码来保存帖子。如何在ASP.NET MVC 5中执行编辑操作?

Abstract.cs(型号)

public class Abstract 
{ 
    public int ID { get; set; } 

    [Required] 
    public ApplicationUser Member { get; set; } 

    [Required] 
    public string AbstractTitle { get; set; } 

    [Required] 
    public string AbstractAim { get; set; } 

    [Required] 
    [StringLength(300)] 
    public string AbstractDetails { get; set; } 

    [Required] 
    public string Author { get; set; } 

    public string CoAuthor { get; set; } 

} 

AbstractController.cs

public class AbstractsController : Controller 
{ 
    private readonly ApplicationDbContext _context; 

    public AbstractsController() 
    { 
     _context = new ApplicationDbContext(); 
    } 

    [Authorize] 
    public ActionResult Create() 
    { 
     return View(); 
    } 

    [Authorize] 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create(AbstractFormViewModel viewModel) 
    { 
     if (!ModelState.IsValid) 
      return View("Create", viewModel); 

     var memberId = User.Identity.GetUserId(); 
     var member = _context.Users.Single(u => u.Id == memberId); 
     var abs = new Abstract 
     { 
      Member = member, 
      AbstractTitle = viewModel.AbstractTitle, 
      AbstractAim = viewModel.AbstractAim, 
      AbstractDetails = viewModel.AbstractDetails, 
      Author = viewModel.Author, 
      CoAuthor = viewModel.CoAuthor 

     }; 
     _context.Abstracts.Add(abs); 
     _context.SaveChanges(); 
     return RedirectToAction("Index", "Home"); 
    } 

} 

这是我的控制器和模型。在这里,我试图实现我自己的方式来执行编辑和更新的东西。 在这里我真的很困惑如何执行此创建操作的编辑材料。

public ActionResult Edit(int id) 
    { 
     var customer = _context.Abstracts.SingleOrDefault(c => c.Id == id); 

     if (customer == null) 
      return HttpNotFound(); 
     var memberId = User.Identity.GetUserId(); 
     var member = _context.Users.Single(u => u.Id == memberId); 
     var viewModel = new Abstract 
     { 
      Member = member, 
      AbstractTitle = viewModel.AbstractTitle, 
      AbstractAim = viewModel.AbstractAim, 
      AbstractDetails = viewModel.AbstractDetails, 
      Author = viewModel.Author, 
      CoAuthor = viewModel.CoAuthor 

     }; 

     return View("CustomerForm", viewModel); 
    } 

但是,这不起作用,请建议或提供一个解决方案,编写一个编辑操作。

+0

你为什么不使用'AbstractFormViewModel'你'编辑()'方法? –

+0

什么是不工作? (并且我假设'db.Entry(Abstract).'是一个拼写错误,并且确实是'db.Entry(abstract).' - 在这两种方法中的'return View'中都是这样。 –

+0

将您的代码放在问题中,而不是注释它不可能读取,尤其是当你没有格式化时) –

回答

1

试试这个,把你的varibales和型号在它

public ActionResult Edit(string id, EMP objmodel) 
    { 
     if (System.Web.HttpContext.Current.Request.HttpMethod == "GET") 
     { 
      int j = Convert.ToInt32(id); 

      EMP e =(EMP) db.EMPs.Single(n => n.id == j); 
      //Either use Single(), SingleorDefault(), First(), FirstorDefault() 
      return View(e); 

     } 
     else if (System.Web.HttpContext.Current.Request.HttpMethod == "POST") 
     { 
      if (objmodel.Name != null && objmodel.Email != null && objmodel.DOB != null) 
      { 
       //db.EMPs.AddorUpdate(objmodel);//requires using System.Data.Entity.Migrations; 
       db.EMPs.Attach(objmodel); 
       db.Entry(objmodel).State = System.Data.Entity.EntityState.Modified; 
       db.SaveChanges(); 
       ViewBag.alert = u1.AlertDismissable("alert-success", "Record Updated successfully"); 
       TempData["alert"] = u1.AlertDismissable("alert-success", "Record Updated successfully"); 
       //return View("ShowAll", db.EMPs.ToList()); 
       return RedirectToAction("index", db.EMPs.ToList()); 
      } 
      else 
      { 
       ViewBag.alert = u1.AlertDismissable("alert-danger", "No record Gets Updated , Maybe some fields are Empty"); 
       TempData["alert"] = u1.AlertDismissable("alert-danger", "No record Gets Updated , Maybe some fields are Empty"); 
       return View(); 
      } 
     } 

     ViewBag.alert = u1.AlertDismissable("alert-success", "Record added successfully"); 
     TempData["alert"] = u1.AlertDismissable("alert-success", "Record added successfully"); 
     //return View("ShowAll", db.EMPs.ToList()); 
     return RedirectToAction("index", db.EMPs.ToList()); 
    } 
+0

'/'应用程序中的服务器错误 传递到字典中的模型项类型为'shanuMVCUserRoles.Models.Abstract',但此字典r指定类型为'shanuMVCUserRoles.ViewModels.AbstractFormViewModel'的模型项目。抛出错误 –

+0

您是否传递了直接模型,这里是IEnumerable List,在您的代码中再次检查您传递的数据 – Saurabh

相关问题