2012-04-06 6 views
0

Hallo Leute Ich habe eine Abfrage, die besagt, dass jedes Spiel für den Kontoinhaber eindeutig sein sollte, das funktioniert gut, jetzt, als ich die gleiche Abfrage für die Bewertungen schrieb, habe ich ein Problem gibt es ein Dropdown welches Spiele aller Benutzer auswählt, die dann eine Rezension geschrieben werden können. Das Problem ist, dass das Drop-Down-Menü auch die von anderen Benutzern hinzugefügten Spiele zeigt, die ich nicht möchte. Ich möchte, dass die hinzugefügten Spiele nur für den Benutzer einzigartig sind, der sie hinzugefügt hat.Die Dropdown-Funktion für Benutzer

hier ist meine Rezension Controller:

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

Der Code, den ich verwendet habe dies die Spiele einzigartig und die Bewertung ist einzigartig zu machen:

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

Ich habe diesen Code in den Index aufgenommen Abschnitt des Controllers und der folgende Code zum ersten Abschnitt des Controllers:

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

Wenn es etwas anderes gibt, was Sie benötigen, lassen Sie es mich bitte wissen.

Datenmodell für alle Tabellen:

Bewertung:

namespace GameTest.Models 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class tblReview 
    { 
     public int ReviewID { get; set; } 
     public string Recomendation { get; set; } 
     public string AvoidOrBuy { get; set; } 
     public string Score { get; set; } 
     public int GameIDFK { get; set; } 
     public string UserName { get; set; } 

     public virtual tblGame tblGame { get; set; } 
    } 
} 

Spiel:

namespace GameTest.Models 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class tblGame 
    { 
     public tblGame() 
     { 
      this.tblReviews = new HashSet<tblReview>(); 
     } 

     public int GameID { get; set; } 
     public string GameName { get; set; } 
     public string ReleaseYear { get; set; } 
     public string Cost { get; set; } 
     public string Description { get; set; } 
     public string Downloads { get; set; } 
     public string Image { get; set; } 
     public string ConsoleNameIDFK { get; set; } 
     public string UserName { get; set; } 

     public virtual tblConsole tblConsole { get; set; } 
     public virtual ICollection<tblReview> tblReviews { get; set; } 
    } 
} 

Console:

namespace GameTest.Models 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class tblConsole 
    { 
     public tblConsole() 
     { 
      this.tblGames = new HashSet<tblGame>(); 
     } 

     public string ConsoleName { get; set; } 

     public virtual ICollection<tblGame> tblGames { get; set; } 
    } 
} 
+0

Es scheint erscheinen Sie nur die zählbare Liste der Spiele bevölkern müssen, um den aktuellen Benutzer verweisen, anstatt die vollständige Liste. –

+0

Wie mache ich das? Könnten Sie uns dabei helfen? wie ich eine Menge von meinem Code zur Verfügung gestellt habe und ein Versuch, es zu lösen danke Ihnen für Ihre freundliche Antwort – user1137472

+0

Sie müssen Ihre Persistenzschicht untersuchen. Sie erstellen Ihre SelectList nicht korrekt. Sie müssen die Elemente herausfiltern, die für den aktuellen Benutzer nicht verfügbar sind. Ich kann Ihnen wirklich keine Details mehr erzählen, ohne Ihr Datenmodell zu verstehen. –

Antwort

0

in dieser Linie, müssen Sie ein Stick .Where(...) auf tblGames zu filtern, um die Spiele aus Sie wollen nicht

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

ich die folgende Störung erhalte: Der Artikel Modell in das Wörterbuch übergeben ist vom Typ GameTest.Models.tblReview‘, aber dieses Wörterbuch erfordert ein Modell Stück type 'System.Collections.Generic.IEnumerable'1 [GameTest.Models.tblReview]'. – user1137472

+0

Ich möchte, dass die Spiele für Nutzer, die sie gepostet haben, einzigartig sind, also sagen Sie, dass Sie ein Spiel auf meiner Website gepostet haben und ich ein Spiel gepostet habe, dass ich keine Rezension über Ihre Spiele schreiben könnte. – user1137472

+0

Ändern Sie 'db.tblGames' in Ihrem Modell "IEnumerable" anstelle von "ICollection" sein, ob das einen Unterschied macht. –

Verwandte Themen