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;
Другие вопросы по тегам