2012-06-04 1 views
1

Я могу найти различные статьи о том, как привязать к модели список элементов в MVC 3, даже изнутри таблицы, но в каждом Например, строки представляют запись в списке. Требования для моего представления заключаются в том, что каждая запись должна быть столбцом. Я не могу получить любой из трюков из следующих статей работающих:MVC 3 - Модель Связывание списка в таблице с каждой записью, являющейся столбцом вместо строки

http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/ http://dotnetslackers.com/articles/aspnet/Understanding-ASP-NET-MVC-Model-Binding.aspx#s8-binding-with -a-список внеклассных-типов

Вот Релевент часть моего зрения:

<table> 
     <thead> 
      <tr> 
       <th>Name</th> 
@foreach (var fact in Model.Facts) 
{ 
       <th>@fact.Name</th> 
} 
      </tr> 
     </thead> 
     <tr> 
      <td>Value</td> 
@foreach (var fact in Model.Facts) 
{ 
      <td>@Html.TextBox("Value" + fact.FactID.ToString(), fact.Value)</td> 
} 
     </tr> 
     <tr> 
      <td>Sample</td> 
@foreach (var fact in Model.Facts) 
{ 
      <td>@Html.TextBox("Sample" + fact.FactID.ToString(), fact.Sample)</td> 
} 
     </tr> 
     <tr> 
      <td>Default?</td> 
@foreach (var fact in Model.Facts) 
{ 
      <td>@Html.RadioButton("Default", fact.FactID, fact.Default)</td> 
} 
     </tr> 
     <tr> 
      <td></td> 
@foreach (var fact in Model.Facts) 
{ 
      <td>@Html.ActionLink("Detail", "Details", "Fact", new { id = fact.FactID }, null)</td> 
} 
     </tr> 
    </table> 

В методе после действий по форме Я принимаю к FormCollection который я вытягивать данные из вручную. Вместо этого я хотел бы принять коллекцию IList, и пусть связующее устройство MVC отобразит все для меня.

Вот мой контроллер действия:

[HttpPost] 
[Authorize] 
public RedirectToRouteResult Facts(FormCollection form) 
{ 
    int factListId = int.Parse(form["FactListID"]); 
    FactList factList = Repository.Find(factListId); 
    int defaultId = int.Parse(form["Default"]); 
    foreach (Fact fact in factList.Facts) 
    { 
     string factId = fact.FactID.ToString(); 
     string toParse = form["Value" + factId]; 
     fact.Value = toParse.Length == 0 ? null : new Nullable<double>(double.Parse(toParse)); 
     fact.TextValue = form["Value" + factId]; 
     toParse = form["Sample" + factId]; 
     fact.Sample = toParse.Length == 0 ? null : new Nullable<int>(int.Parse(toParse)); 
     fact.Default = (fact.FactID == defaultId); 
    } 
    Repository.Save(); 
    return RedirectToAction("Index"); 
} 

Каждый получил что-то мне точку в правильном направлении? Я предполагаю, что есть информация, но я просто не могу найти ее в огромном объеме информации о том, как сделать это более «стандартную» 1 строку на запись.

Благодаря

+0

Итак, вы хотите, чтобы столбцы росли, а не строки? – Jared

ответ

3

Если у вас есть IList, то делать что-то, как это должно работать. Если вы создаете свои входы с помощью числовых индексов, то вы даете MVC достаточную информацию, чтобы связать их в сообщении.

@for (int i = 0; i< Model.Facts.Count(); i++) 
{ 
     <td>@Html.TextBoxFor(m => m.Facts[i].Value)</td> 
} 

<--! Do other fields the same way --> 

Ваше постпостановление контроллера должно принимать параметр, который имеет тот же тип, что и ViewModel. Тогда вы должны убедиться, что факты IList были связаны правильно.

+0

Да, это сделал трюк. У меня были проблемы с RadioButtonFor, но я настроил модель своего вида, чтобы обойти ее. Не уверен, почему я делал все это настолько сложным с моими предыдущими попытками ... ну ладно, спасибо! – bojingo

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

  • Нет связанных вопросов^_^