2016-03-31 2 views
0

У меня есть следующий объект, который я использую в качестве модели в моем приложении ASP.NET MVCКаков наилучший способ управления очень сложной моделью?

public class USERS{ 
     public int PK { get; set; } // Primary key 
     public string Username { get; set; } 
     public string Password { get; set; } 
     public int FK_PEOPLE { get; set; } //Foreign key to table PEOPLE 
     public PEOPLE Person { get; set; } // The very PEOPLE property 
     ...10-15 additional fields, including List<SomeEntity>, etc. 
} 

А вот классовые ЛЮДИ

public class PEOPLE{ 
     public int PK { get; set; } // Primary key 
     public string Name { get; set; } 
     public string Surname { get; set; } 
} 

Когда я посылаю ПОЛЬЗОВАТЕЛЕЙ объект на мой взгляд, то Я получаю все данные, и я показываю все в форме. Все в порядке. Я вижу все данные. Чтобы сделать вещи более интересными, я показываю свойства PEOPLE в частичном представлении.

Проблемы возникают, когда я возвращаюсь к модели в своем действии HttpPost. Мне удалось (используя HiddenFor) получить USERS.PK и USERS.FK_PEOPLE, но объект USERS.Person всегда имеет значение null.

Я попробовал [Bind (Prefix = "USERS")], но это не помогло. Даже если бы такое решение было сработано, я должен сделать это для каждого отдельного объекта в моей модели? Нужно ли мне вручную исправлять все привязки для каждого свойства? Это будет длиться вечно .. Там должно быть лучшим способом, чтобы получить мою модель полной, по крайней мере, как я послал его в действии HttpGet ..

благодарен за всю помощь я могу получить :)

PS: Я знаю, есть много потоков о привязке к модели, но я не думаю, что у меня есть проблема привязки. Я хочу найти способ «избежать» привязки.

+0

Если это не является обязательным, ваше представление неверно, и у вас ** есть проблема с _связыванием. Покажи это! (и использование частичного действия не будет работать, если вы не передадите 'HtmlFieldPrefix' как' дополнительныйViewData'. Используйте 'EditorTemplate') –

+0

Но вы действительно хотите опубликовать всю эту модель? –

+0

Возможно, я бы создал ViewModel, у которого были только свойства, которые вам нужно показать в виде плоского вида, поэтому у вас не слишком много вложенных сложных объектов. –

ответ

0

Заслуга @StephenMuecke

Я использовал мой PartialView неправильно. Решение было использовать его как EditorTemplate. Так, это работает:

<div class="form-group"> 
     @Html.EditorFor(m => m.PERSON) 
    </div> 

Это не работает:

<div class="form-group"> 
     @{ Html.RenderPartial("~/Views/PartialViews/Person/Index.cshtml", Model.PERSON); } 
    </div> 

Наконец, все, что я должен был сделать, чтобы переименовать мой PartialView в PERSON.cshtml и переместить его под ~/Views/Shared/EditorTemplates/

Большое спасибо!

Смежные вопросы