Witam.
https://bitbucket.org/Draqun/aspforum/src - kod aplikacji
Jestem świeżakiem w ASP.NET. Mianowicie muszę napisać forum i nie bardzo idzie mi komunikacja z bazą danych. Mianowicie stworzyłem projekt w MVC5. Wraz z projektem dostarczony został system użytkowników, który mi odpowiada. Następnie stworzyłem sobie bazę i tabele mi odpowiadające i wygenerowałem model EntityFramework a na podstawie modelu całe klasy CRUD'a. Wszystko byłoby super, gdyby nie to, że nie wszystko da się zrobić tutaj tak prosto jak w RoR czy w Django :) Mianowicie w kontrolerze tematów chcę podać przy dodawaniu ID użytkownika, który to tworzy i klucz obcy do kategorii forum (działu, ale zwał jak zwał). No i tutaj napotkałem następujące problemy.
- W metodzie Index jak chce wrzucić do widoku nazwę kategorii otrzymuję wyjątek, a robię to za pomocą nastepującego kodu
ViewBag.CategoryName = db.Categories.Find(CategoryId).Name;
Niestety metoda Find niczego nie znajduję.
-
Przy tworzeniu chcę dodać do tematu Id kategorii i Id usera. Nie jestem pewien co robię źle, ale również i tu rzuca mi wyjątkiem (metoda Create w w TopicsController). Swoją drogą nie mam bladego pojęcia jak pobrać id usera. User.Identity nie zwraca zawartości pola Id, no i podobny problem co z metodą Index i dostępem do Category.
-
Jest jakaś fajna możliwość w jednym widoku wyświetlenia dwóch formularzy? Chciałbym przy tworzeniu tematu automatycznie utworzyć pierwszy post.
Aby temat był kompletny dodaję fragment omawianego kontrolera.
namespace Forum.Controllers
{
public class TopicsController : Controller
{
private TopicsContext db = new TopicsContext();
//
// GET: /Topics/
public ActionResult Index(int CategoryId)
{
var topics = db.Topics.Include(t => t.Category);
ViewBag.CategoryId = CategoryId;
return View(topics.ToList());
}
//
// GET: /Topics/Create
public ActionResult Create(int CategoryId)
{
ViewBag.CategoryId = new SelectList(db.Categories, "Id", "Name");
ViewBag.CategoryIds = CategoryId;
return View();
}
//
// POST: /Topics/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Topic topic, int CategoryId)
{
if (ModelState.IsValid)
{
topic.Author = 1;
topic.CategoryId = CategoryId;
db.Topics.Add(topic);
db.SaveChanges();
return RedirectToAction("Index", "Topics", new { CategoryId = CategoryId });
}
ViewBag.CategoryId = new SelectList(db.Categories, "Id", "Name", topic.CategoryId);
ViewBag.CategoryIds = CategoryId;
ViewBag.CategoryName = db.Categories.Find(CategoryId).Name;
return View(topic);
}
...
}