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 });

私の問題は、人々がゲームにレビューを書けるようにしようとしていることです。ゲームを投稿するすべてのユーザーが一意であり、ゲームは自分のアカウントでのみ表示できるようになっていますが、編集/削除/更新に関してはできません。ゲームレビューを投稿したユーザーが自分のゲームのみを削除/更新/編集でき、他のユーザーは削除できないようにします。

たとえば、shamとbamという2人の構成ユーザーがいます。各ユーザーはレビューページに投稿したゲームを見ることができますが、レビューの編集/更新と削除に関しては、ユーザーはお互いの投稿を削除/編集と更新の両方を行います。

これは私のレビューコントローラーです:

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);
        }
    }
}

さらに必要な場合は、私に感謝を知らせてください

とても有難い

4

1 に答える 1

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);
    }
于 2012-04-06T17:04:26.467 に答える