MVC3 Madness - Помогите, пожалуйста, связать содержащиеся коллекции? - PullRequest
0 голосов
/ 24 октября 2011

Я в полном недоумении и не могу найти решение этой проблемы.Может ли кто-нибудь помочь в предоставлении какого-либо кода:

  • Разрешить использование [] для сохранения содержимого коллекции в @model?
  • Каким-то образом сопоставить / связать содержащуюся коллекцию из модели (я читал блог по связыванию с Филом Хааком, но эта плоская коллекция не передается .... У меня уже есть модель A, которая входит?
  • Я также попытался настроить новую модель представления (содержит классы моделей A и B снизу), но моя модель возвращается в ноль в httppost (даже если я добавляю простой тип строки, такой как «Имя» исвязать это ... возвращается ноль). Я уверен, что есть проблемы AutoMapper, о которых я не знаю.

Я полный новичок с mvc3. Вот подробности ...

Изменить вид:

    @model MVC3.Models.A

   // I need to save collection values but can't use [] here to setup model binding.
   // I have read about mapping collections but I already have a model A that is getting passed in.
   //
   @Html.EditorFor(model => model.Bs[0].Val)

Модели:

public  class A
{
    public A()
    {
        this.Bs = new HashSet<B>();
    }

    public int Name { get; set; }
    public virtual ICollection<B> Bs { get; set; }  // Can't change this to ILIst because of above HashSet

 - }

       public  class B
       {
           public int Val { get; set; }  
           public virtual A A { get; set; }
       }

1 Ответ

1 голос
/ 24 октября 2011

Ваша модель имеет круговые ссылки в ваших моделях представления.Это не поддерживается сценарием связывателя модели по умолчанию.Я бы порекомендовал вам всегда использовать шаблоны редактора в ваших представлениях.Пример:

Модель:

public  class A
{
    public int Name { get; set; }
    public virtual ICollection<B> Bs { get; set; }
}

public class B
{
    public int Val { get; set; }
}

Контроллер:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new A
        {
            Name = 123,
            Bs = new[]
            {
                new B { Val = 1 },
                new B { Val = 2 },
                new B { Val = 3 },
            }
        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(A a)
    {
        // The Bs collection will be properly bound here
        return View(a);
    }
}

Представление (~/Views/Home/Index.cshtml):

@model A

@using (Html.BeginForm())
{
    <div>
        @Html.LabelFor(x => x.Name)
        @Html.EditorFor(x => x.Name)
    </div>
    @Html.EditorFor(x => x.Bs)
    <button type="submit">OK</button>
}

Соответствующий шаблон редактора, которыйбудет отображаться для каждого элемента коллекции Bs (~/Views/Home/EditorTemplates/B.cshtml):

@model B
<div>
    @Html.LabelFor(x => x.Val)
    @Html.EditorFor(x => x.Val)
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...