ASP NET MVC 3 Модели каскадных классов - PullRequest
0 голосов
/ 19 октября 2011

Часть моего проекта использует Опросы, и я использую EF для Классов.У меня есть модели:

Опросы.cs

public class Poll
{
    [Key]
    public int ID { get; set; }

    public string Title { get; set; }

    [Column("creation_date")]
    public DateTime CreationDate { get; set; }

    [Column("expiration_date")]
    public DateTime ExpirationDate { get; set; }

    public virtual ICollection<PollOption> Options { get; set; }
    public virtual ICollection<PollVote> Votes { get; set; }
}

PollOption.cs

[Table("PollsOptions")]
public class PollOption {

    [Key]
    public int ID { get; set; }

    [Display(Name = "Poll")]
    [Required(ErrorMessage = "Poll must be set.")]
    [Column("poll_id")]
    public int PollID { get; set; }

    [Required(ErrorMessage = "Option's Text cannot be empty.")]
    public string Text { get; set; }

    [Editable(false)]
    public int Votes { get; set; }


    public virtual Poll Poll { get; set; }
}

PollVote.cs

[Table("PollsVotes")]
public class PollVote
{

    [Key]
    [Display(Name = "Player", Description = "Player that voted.")]
    [Column("player_id", Order = 0)]
    public int PlayerID { get; set; }


    [Key]
    [Display(Name = "Option", Description = "Option voted by the Player.")]
    [Column("option_id", Order = 1)]
    public int OptionID { get; set; }


    public virtual Player Player { get; set; }
    public virtual PollOption Option { get; set; }

}

Я хочу использовать его в таком виде: - Передать модель из контроллера, содержащего список опросов, например:

Poll[0]:
----PollTitle
----Options:
---- ----Option1 From Poll0
---- ----Option2 From Poll0
---- ----Option3 From Poll0

----Votes:
---- ----Vote1 for Option1 From User X
---- ----Vote2 for Option2 From User Y
---- ----Vote3 for Option3 From User Z

Poll[1]:
----PollTitle
----Options:
---- ----Option4 From Poll1
---- ----Option5 From Poll1
---- ----Option6 From Poll1

----Votes:
---- ----Vote1 for Option4 From User X
---- ----Vote2 for Option5 From User Y
---- ----Vote3 for Option6 From User Z

Как мне это сделать??

Надеюсь, вы понимаете ... Спасибо!

1 Ответ

0 голосов
/ 19 октября 2011

Вот грубый готовый подход ... настроить по необходимости

Вид:

@model IEnumerable<MvcApplication1.Models.Poll>

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>
@if (Model == null)
{
        @:No Polls to display.
}
else
{
    foreach (var poll in Model)
    {
         @Html.DisplayFor(m => poll)
    }
}

Шаблон отображения (views / shared / DisplayTemplates / Poll.cshtml)

(Если вы не сталкиваетесь с ними, они очень полезны.)

@model MvcApplication1.Models.Poll

@Html.DisplayFor(model => model.Title)

Options:
@foreach (var option in Model.Options)
{ 
    @Html.DisplayFor(m=> option.Text)
}

Votes:
@foreach (var vote in Model.Votes)
{
    @Html.DisplayFor(m=> vote.Option)
}

Надеюсь, это поможет вам выбрать правильный путь.

...