2014-11-05 3 views
1

Я использую сначала MVC и EF DB. Мои модели созданы EF. В моей модели у меня есть два свойства типа ICollection.MVC - Binding ICollection свойство

Моя проблема в том, когда я отправляю свою форму, эти свойства являются пустыми (я не отправлять их для просмотра Emty)

My Model:

public partial class Account 
    { 
     public Account() 
     { 
      this.Account_Level = new HashSet<Account_Level>(); 
      this.Account_Team = new HashSet<Account_Team>(); 
     } 

     public long Id { get; set; } 
     public string UserName { get; set; } 
     public string Password { get; set; } 
     public bool IsAdmin { get; set; } 

     public virtual ICollection<Account_Level> Account_Level { get; set; } 
     public virtual ICollection<Account_Team> Account_Team { get; set; } 
    } 

Примечание: Мои ICollection свойства нет на мой взгляд, но я нуждаюсь в них обратно в своем контроллере.

Edit:

Я добавил ниже код на мой взгляд. В моем html я вижу, что мои значения Icollection добавляются как скрытые, но когда я делаю сообщение, свойства ICollection все еще пусты. Так что я до сих пор не получаю эти ценности.

for (int i = 0; i < Model.Account_Level.Count(); i++) 
{ 
    @Html.HiddenFor(m => m.Account_Level.ElementAt(i).AccountId) 
    @Html.HiddenFor(m => m.Account_Level.ElementAt(i).Id) 
    @Html.HiddenFor(m => m.Account_Level.ElementAt(i).LevelId) 
} 

for (int i = 0; i < Model.Account_Team.Count(); i++) 
{ 
    @Html.HiddenFor(m => m.Account_Team.ElementAt(i).AccountId) 
    @Html.HiddenFor(m => m.Account_Team.ElementAt(i).Id) 
    @Html.HiddenFor(m => m.Account_Team.ElementAt(i).TeamId) 
} 
+0

Можете ли вы объяснить, если вам не нужно это, на ваш взгляд, чем почему вы их должны иметь круглую поездку и снова доступны после публикации или почему они должны быть частью модели представления – Jags

+0

Сделайте коллекции 'IList' и используйте индексирование' @ Html.HiddenFor (m => m.Account_Level [i] .AccountId) 'Но это кажется бессмысленным - далеко лучше получить коллекции на сервере на почте, а это делает это –

+0

@StephenMuecke Сделаю это, спасибо. – Sefa

ответ

1

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

Метод HiddenFor на ваш взгляд Razor создает что-то вроде:

<input id="AccountId" type="hidden" value="1" name="AccountId" data-val-required="The AccountId field is required." data-val-number="The field AccountId must be a number." data-val="true"> 

Как вы видите Созданное имя AccountId, которое не является правильным, если вы хотите, чтобы сделать его Привязываемое.

Правильное имя должно быть чем-то вроде Account_Level[0].AccountId.

Вот полный пример правильного именования для ваших скрытых полей:

for (int i = 0; i < Model.Account_Level.Count(); i++) 
{ 
    @Html.HiddenFor(m => m.Account_Level.ElementAt(i).AccountId, new { @Name = string.Format("Account_Level[{0}].AccountId", i) }) 
    @Html.HiddenFor(m => m.Account_Level.ElementAt(i).Id, new { @Name = string.Format("Account_Level[{0}].Id", i) }) 
    @Html.HiddenFor(m => m.Account_Level.ElementAt(i).LevelId, new { @Name = string.Format("Account_Level[{0}].LevelId", i) }) 
} 

Это убедитесь, что ваши скрытые имена полей распознаются по модели по умолчанию вяжущего в.

Здесь Вы можете найти более подробную информацию о соглашениях по именованию ASP.NET MVC:

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/

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