saksaksak Ответов: 0

Mvc5 master detail binding


У меня есть 2 таблицы в моей базе данных SQL (компании, сектора). "Компании" - это мастер, а "секторы" - это детали. Внешний ключ присоединяется к секторам.CompanyID to Companies.Id. Существует также таблица с именем "StaticSectors", которая содержит все статические значения секторов, которые пользователь может выбрать в порядке внутреннего соединения. Например staticSector (код: 1, наименование: SectorA, ParentTreeViewID: 0) является родителем следующую строку секторе (код: 2, наименование: SectorB, ParentTreeViewID: 1)
Итак, схема таблиц такова
- Компании (Id, название, описание)
- Секторы (Id, StaticSectorID, CompanyID)
- StaticSectors (Id, TreeViewName, ParentTreeViewID)

На стороне MVC у меня есть связанные модели, контроллер [CompaniesController] и представление Create for Company.

Я создаю форму (приведенное выше представление), используя реализацию TreeView, чтобы выбрать для пользователя интернета секторы компании, которые будут регистрироваться. Проблема заключается в том, что привязка подробной таблицы (секторов) не может быть выполнена успешно. Пожалуйста, помогите!!!

Что я уже пробовал:

Модель Компании

public class Company
    {
        public Company()
        {
            StaticSectorsViewModel = new List<StaticSectorViewModel>();
        }
        public int Id { get; set; }

        public string Name { get; set; }

        public string Description { get; set; }

        public IList<StaticSectorViewModel> StaticSectorsViewModel { get; set; }
}


В StaticSectorViewModel

public class StaticSectorViewModel
   {
       public int Id { get; set; }
       public string TreeViewName{ get; set; }
       public int ParentTreeviewID { get; set; }
       public bool IsChecked { get; set; }
    }


Метод POST контроллера

[HttpPost]
       [ValidateAntiForgeryToken]
       // I have already try that
       //public ActionResult Create([Bind(Include = "Id,Name,Description,StaticSectorsViewModel")] Company company)
       public ActionResult Create(Company company)
       {
// ISSUE HERE: The company.StaticSectorsViewModel IS NULL and i cannot retrieve the selected sectors in order to Save....
           if (ModelState.IsValid)...
           {


Метод GET контроллера

[HttpGet]
       public ActionResult Create()
       {
           Company company = new Company();

           db.StaticSectors.ToList().ForEach(listItem => company.StaticSectorsViewModel.Add(new StaticSectorViewModel{
               Id = listItem.Id,
               TreeViewNameEN = listItem.TreeViewNameEN,
               TreeViewNameGR = listItem.TreeViewNameGR,
               ParentTreeviewID = listItem.ParentTreeviewID,
               IsChecked = false
           }));

return View(company);
       }


Сегмент Кода Создания Представления

<div class="treeview">
    @if (Model.StaticSectorsViewModel != null && Model.StaticSectorsViewModel.Count() > 0)
    {
        <ul class="list-group">
            @foreach (StaticSectorViewModel currentSector in StaticSectorsViewModel.Where(current => current.ParentTreeviewID == 0).ToList())
            {
                <li class="text-info list-group-item">
                    @if (currentSector.ParentTreeviewID == 0)
                    {
                        <span class="collapse collapsible">&nbsp;</span>
                        <span>
                            <label><strong style="color: #0a0826">@currentSector.TreeViewNameEN</strong></label>
                        </span>
                        <ul>
                            @foreach (StaticSectorViewModel currentSubSector in StaticSectorsViewModel.Where(current => current.ParentTreeviewID == currentSector.Id).ToList())
                            {
                                <li class="text-info list-group-item">
                                    <label>
                                        @Html.EditorFor(model => model.StaticSectorsViewModel.Where(x => x.Id == currentSubSector.Id).First().IsChecked, new { htmlAttributes = new { @value = currentSubSector.Id, @style = "color: #333333"} }) &nbsp; @currentSubSector.TreeViewName

@* I try the following code without success *@
@*@Html.CheckBox(currentSubSector.Id, new { value = currentSubSector.Id, @checked = currentSubSector.IsChecked });*@
                                        @*@Html.CheckBoxFor(model => currentSubSector.IsChecked, new { @id = currentSubSector.Id.ToString(), name = currentSubSector.Id, style = "color: #333333" })*@

                                    </label>
                                </li>
                            }
                        </ul>
                    }
                </li>
            }
        </ul>


Я думаю, что проблема в том, что модель передается полная данных, но когда публикуются данные модели.StaticSectorVsViewModel потеряны. Первичные данные, такие как название компании, описание, в порядке.

0 Ответов