4

Visual Studio 2010 で C# MVC4 を学習しようとしています。

私がしたいのは、誰かのユーザー名で選択された 1 つのビューで 2 つのモデルの完全な出力を取得することです。

したがって、/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);
        }
    }
}

ビューモデルクラスを試しましたが、誰かのコーチ名に関するこの情報を取得する方法がわかりません。

お返事をお待ちしております。

4

1 に答える 1

1

この猫の皮を剥ぐ方法はたくさんありますが、最初に確認しなければならないことの1つは、両方のモデルのインスタンスを1つも返送していないことです。Detailsアクションのコードを調べる場合:

public ActionResult Details(int id = 0)
{
    Teams teams = db.Teams.Find(id);
    if (teams == null)
    {
        return HttpNotFound();
    }
    return View(teams);
}

明らかに、返送するのはTeamsモデルの1つのインスタンスだけです。それでは、私たちが持っているオプションを調べてみましょう。次のコードを検討してください。

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

これで、ビューでモデルをこれに設定できます(完全に修飾する必要がありTeamsPlayers@ model宣言で):

@model Tuple<Teams, List<Players>>

そこから、次のようなことができます。

Model.Item1.Name

また:

Model.Item2[0].Name;
于 2013-01-04T12:39:17.787 に答える