2012-04-06 34 views
1

嗨,我有一个小问题可能是一个难题我试图做到这一点与我的审查控制器的索引段中的以下代码:无法对用户发帖进行删除/更新/编辑

var Info = db.tblReviews.Include(x => x.tblGame).Where(UserInfo => UserInfo.UserName.Equals(User.Identity.Name)).ToList(); 
return View(Info); 

并在第一创建我申请的审查控制器:

ViewBag.GameIDFK = new SelectList(db.tblGames, "GameID", "GameName"); 
return View(new tblReview { UserName = @User.Identity.Name }); 

我的问题是我试图让人们写游戏评论,AV得到了它,使得张贴的所有用户游戏是独一无二的,游戏只有通过自己的帐户才能看到,但是当涉及到编辑/删除/ u pdating我不能得到它,以便用户发布游戏审查只能删除/更新/编辑自己的游戏,而不是其他用户。

例如,我有两个名为sham和bam的用户,每个用户都可以看到他们发布在评论页面上的游戏,但是当涉及到编辑/更新和删除评论时,用户删除/编辑和更新彼此的职位。

这是我的检讨控制器:

using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.Entity; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using GameTest.Models; 

namespace GameTest.Controllers 
{ 
    public class ReviewController : Controller 
    { 
     private gamezoneDBEntities db = new gamezoneDBEntities(); 

     // 
     // GET: /Review/ 

     public ViewResult Index() 
     { 
      var Info = db.tblReviews.Include(x => x.tblGame).Where(UserInfo => UserInfo.UserName.Equals(User.Identity.Name)).ToList(); 
      return View(Info); 
     } 

     // 
     // GET: /Review/Details/5 

     public ViewResult Details(int id) 
     { 
      tblReview tblreview = db.tblReviews.Find(id); 
      return View(tblreview); 
     } 

     // 
     // GET: /Review/Create 

     public ActionResult Create() 
     { 
      ViewBag.GameIDFK = new SelectList(db.tblGames, "GameID", "GameName"); 
      return View(new tblReview { UserName = @User.Identity.Name }); 
     } 

     // 
     // POST: /Review/Create 

     [HttpPost] 
     public ActionResult Create(tblReview tblreview) 
     { 
      if (ModelState.IsValid) 
      { 
       db.tblReviews.Add(tblreview); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 

      ViewBag.GameIDFK = new SelectList(db.tblGames, "GameID", "GameName", tblreview.GameIDFK); 
      return View(tblreview); 
     } 

     // 
     // GET: /Review/Edit/5 

     public ActionResult Edit(int id) 
     { 
      tblReview tblreview = db.tblReviews.Find(id); 
      ViewBag.GameIDFK = new SelectList(db.tblGames, "GameID", "GameName", tblreview.GameIDFK); 
      return View(tblreview); 
     } 

     // 
     // POST: /Review/Edit/5 

     [HttpPost] 
     public ActionResult Edit(tblReview tblreview) 
     { 
      if (ModelState.IsValid) 
      { 
       db.Entry(tblreview).State = EntityState.Modified; 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 
      ViewBag.GameIDFK = new SelectList(db.tblGames, "GameID", "GameName", tblreview.GameIDFK); 
      return View(tblreview); 
     } 

     // 
     // GET: /Review/Delete/5 

     public ActionResult Delete(int id) 
     { 
      tblReview tblreview = db.tblReviews.Find(id); 
      return View(tblreview); 
     } 

     // 
     // POST: /Review/Delete/5 

     [HttpPost, ActionName("Delete")] 
     public ActionResult DeleteConfirmed(int id) 
     {    
      tblReview tblreview = db.tblReviews.Find(id); 
      db.tblReviews.Remove(tblreview); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     protected override void Dispose(bool disposing) 
     { 
      db.Dispose(); 
      base.Dispose(disposing); 
     } 
    } 
} 

如果你需要更多信息,请让我知道感谢

大加赞赏

回答

1

这很难回答这个问题,而不能看到你的数据结构,但我会尽力帮助。

我可以在您的Index()行动中看到您获取用户名以检索游戏。所以,看起来你的评论对象存储了一些对创建它的用户的引用。

因此,在更新/删除时,只需再次检索用户名,如果与检查对象上的用户名不匹配,则不要执行该操作。

public ActionResult Edit(int id) 
    { 
     //See if this review id was created by the current user 
     if(!db.tblReviews.Any(UserInfo => UserInfo.UserName.Equals(User.Identity.Name) && UserInfo.Id == id)) 
     { 
      //Redirect the user away from this edit page, they can't edit this one. 
     } 

     tblReview tblreview = db.tblReviews.Find(id); 
     ViewBag.GameIDFK = new SelectList(db.tblGames, "GameID", "GameName", tblreview.GameIDFK); 
     return View(tblreview); 
    } 
+0

你可以挑衅一些代码吗? – user1137472 2012-04-06 17:08:54

+0

已添加源代码。 – SouthShoreAK 2012-04-06 17:37:40

相关问题