Building on Uno's answer, I would recommend the following refactor for the controller action: public ActionResult Category(int? id) { // No need to create a pid variable if it's only // used once here. Inline the null conditional. var category = db.Categories.Find(id ?? 1); if (category == null) { // Assuming you have a global error handler attribute registered, // the condition where a requested category is not found is in fact // an exceptional state and the HTTP 404 status code is semantically // more intuitive than returning a generic error view. throw new HttpException(404, "Category not found."); } // I too tend to avoid returning IEnumerables outside of the context // because sometimes the enumeration depends on something that falls // out of scope (like the data context). But I would typically avoid // the conversion to a list until the last possible moment. // If you need to come back and do some logic with the model later, // you can add it before returning the view and work directly with // the enumerable which is probably preferable in most cases. var model = category.Products; return View(model.ToList()); } As for separating the category partial into a controller action: Category list action: public ActionResult CategoryList() { @using (var db = new WebShopEntities()) { return PartialView("CategoryList", db.Categories.ToList()); } } Partial view to go with: @model List<Category> foreach (var category in Model) { <a href="@Url.Action("Category","Product", new {id = category.id})" class="list-group-item">@category.name</a> }