2 модели на выбор
Я пытаюсь изучить C# MVC4 с Visual Studio 2010.
То, что я хочу сделать, это получить полный вывод 2 моделей на 1 вид, выбранный на чьём-то имени пользователя.
Так что, если я зайду в /Teams/Details/1, я получу всю информацию от моделей игроков и команд.
Модели:
public class Players
{
public int ID { get; set; }
public string Name { get; set; }
public int price { get; set; }
public string coach { get; set; }
public string Team { get; set; }
}
public class Teams
{
public int ID { get; set; }
public string Name { get; set; }
public string coach { get; set; }
}
контроллер
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using voetbal.Models;
namespace voetbal.Controllers
{
public class TeamsController : Controller
{
private TeamsDBContext db = new TeamsDBContext();
//
// GET: /Teams/
public ActionResult Index()
{
return View(db.Teams.ToList());
}
//
// GET: /Teams/Details/5
public ActionResult Details(int id = 0)
{
Teams teams = db.Teams.Find(id);
if (teams == null)
{
return HttpNotFound();
}
return View(teams);
}
//
// GET: /Teams/Create
public ActionResult Create()
{
return View();
}
//
// POST: /Teams/Create
[HttpPost]
public ActionResult Create(Teams teams)
{
if (ModelState.IsValid)
{
teams.coach = User.Identity.Name;
db.Teams.Add(teams);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(teams);
}
//
// GET: /Teams/Edit/5
public ActionResult Edit(int id = 0)
{
Teams teams = db.Teams.Find(id);
if (teams == null)
{
return HttpNotFound();
}
return View(teams);
}
//
// POST: /Teams/Edit/5
[HttpPost]
public ActionResult Edit(Teams teams)
{
if (ModelState.IsValid)
{
db.Entry(teams).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(teams);
}
//
// GET: /Teams/Delete/5
public ActionResult Delete(int id = 0)
{
Teams teams = db.Teams.Find(id);
if (teams == null)
{
return HttpNotFound();
}
return View(teams);
}
//
// POST: /Teams/Delete/5
[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id)
{
Teams teams = db.Teams.Find(id);
db.Teams.Remove(teams);
db.SaveChanges();
return RedirectToAction("Index");
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
}
}
Я абсолютно уверен, как это сделать, я попробовал класс ViewModel, но я не знаю, как получить эту информацию о ком-то имени тренера.
Я с нетерпением жду вашего ответа.
1 ответ
Есть много способов снять шкуру с этой кошки, но первое, что вы должны сначала увидеть, это то, что вы не отправляете обратно ни одного экземпляра обеих моделей. Если вы изучите код для Details
действие:
public ActionResult Details(int id = 0)
{
Teams teams = db.Teams.Find(id);
if (teams == null)
{
return HttpNotFound();
}
return View(teams);
}
ясно, что все, что мы отправляем обратно, является одним из примеров Teams
модель. Итак, давайте рассмотрим вариант, который у нас есть. Рассмотрим следующий код:
public ActionResult Details(int id = 0)
{
Teams teams = db.Teams.Find(id);
if (teams == null)
{
return HttpNotFound();
}
// get the list of players into a List<Players>
var players ...
var model = new Tuple<Teams, List<Players>>(teams, players);
return View(model);
}
теперь в представлении мы можем установить нашу модель на это (обратите внимание, вам нужно будет полностью пройти квалификацию Teams
а также Players
в объявлении @model):
@model Tuple<Teams, List<Players>>
и оттуда мы можем сделать что-то вроде:
Model.Item1.Name
или же:
Model.Item2[0].Name;