Создание представления для отношения многих ко многим в .net MVC - PullRequest
1 голос
/ 07 января 2012

Я создаю MediaLibrary в MVC.У меня есть модель MediaType и модель поддержки.Каждый MediaType (фильм, игра, музыка) может иметь поддержку (CD, DVD, BluRay, ...).

Я создал модели и добавил отношения (hasmany, withmany, ...),контроллер и представления для поддержки (здесь нет проблем), но я не знаю, как управлять контроллером и просматривать MediaType, чтобы иметь возможность добавлять несколько Поддержек и проверять их с помощью модели.

Модель MediaType:

[Bind(Exclude = "MediaTypeId")]
public class MediaType
{
    [ScaffoldColumn(false)]
    public int MediaTypeId { get; set; }

    [DisplayName("Media type")]
    public string name { get; set; }

    // Disponible supports
    public virtual ICollection<Support> Supports { get; set; }
}

Модель поддержки

[Bind(Exclude = "SupportId")]
public class Support
{
    [ScaffoldColumn(false)]
    public int SupportId { get; set; }

    [DisplayName("Support name")]
    public string name { get; set; }

    // MediaTypes using this support (not used in the view now)
    public virtual ICollection<MediaType> MediaTypes { get; set; }
}

Действие Create из контроллера MediaType

public ActionResult Create()
    {
        ViewData["SupportsList"] = new SelectList(db.Supports.ToList(), "SupportId", "name");
        return View();
    } 
[HttpPost]
    public ActionResult Create(MediaType mediatype)
    {
        if (ModelState.IsValid)
        {
            db.MediaTypes.Add(mediatype);
            db.SaveChanges();
            return RedirectToAction("Index");  
        }

        ViewData["SupportsList"] = new SelectList(db.Supports.ToList(), "SupportId", "name");
        return View(mediatype);

Представление Create для действия Create MediaType Createконтроллер (часть для Supports)

<div class="editor-field" id="supportList">
        @Html.DropDownList("Supports", (SelectList)ViewData["SupportsList"])
        <a href="#" id="addSupport">Ajouter</a>&nbsp;<span id="addSupportError" class="error"></span>
        <script type="text/javascript">
            $('#addSupport').click(function () {
                if ($('input[name="SupportsIds[]"][value="' + $('#Supports').val() + '"]').length < 1) {
                    $('#supportList').append('<div>' + $('#Supports option:selected').text() + '<input type="hidden" name="SupportsIds[]" value="' + $('#Supports').val() + '" /></div>');
                    $('span#addSupportError').text('');
                } else {
                    $('span#addSupportError').text('The support has already been added');
                }
            });
        </script>
    </div>

Я действительно сделал странный скрипт в jQuery для добавления Supports в MediaType, в db есть выпадающий список со всеми поддержками, когда вы нажимаете add, он добавляетметка с именем и скрытым полем с идентификатором поддержки (имена скрытых полей - "SupportIds []", поэтому он должен возвращать список идентификаторов поддержки, нет?)

Кто-то уже что-то кодировалкак тесть (много ко многим, ...)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...