2014-12-02 2 views
0

У меня есть ViewModel называется MyViewModel, который содержит:C# MVC сильно типизированный вид с ViewModel

public IList<Config> Config { get; set; } 
public bool Disabled { get; set; } 
public string Name { get; set; } 

Config является объектом, который содержит ID & Value

на стороне контроллера я заселяющая все значения и в представлении мне нужно получить доступ к этому списку конфигураций отдельных элементов, где id = x, и он должен отображать соответствующее значение в метке. так что мне нужно сильно типизированных ярлык для этого что-то вдоль линий:

@Html.LabelFor(a => ....) 

я не уверен, о том, что должно быть мое заявление Linq для отображения Config.Value в наклейке, где Config.Id = x. любая помощь будет оценена. спасибо

+0

Если вам нужно получить доступ к 'Config', где' id = x', почему бы не просто фильтровать коллекцию, чтобы включать только те элементы, перед тем как передать модель представления в представление? –

+0

Я хочу иметь несколько ярлыков и следующий будет с значением Config, где id = y –

+0

Тогда вам понадобится что-то вроде '@foreach (элемент var в Model.Config.Where (i => i.ID ==" x ")) {.... ' –

ответ

1

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

ViewBag.Ids = Config.Select(x => x.Id).Distinct(); //create list of all existing Ids 

Pass, что список в вашем View через ViewBag и итерацию через него, а также ваш список объектов:

@foreach(int IdNum in ViewBag.Ids) 
{ 
    <table> 
    @foreach(Config c in Config.Where(x=> x.Id == IdNum)) 
    { 
     <tr> 
      <td> @c.ID </td> 
      <td> @c.property1 </td> 
      <td> @c.property2 </td> 
     </tr> 
    } 
    </table> 
} 

В этом случае, я бы не стал заморачиваться с LabelFor() метод, так как достаточно просто использовать сокращенную @ object.property, встроенную в HTML.

0

, чтобы отобразить список группой попробовать этот

<table> 
    @{ 

     foreach (var group in Model.Config.GroupBy(x => x.Id)) 
     { 
    <tr> 
     <td>@group.Key</td> </tr> 
     int index =0; 
@foreach(Config c in Model.Config.Where(x=> x.Id == group.Key)) 
{ 
    <tr> 
     <td> @Model.Config[index].ID </td> 
     <td> @Model.Config[index].property1 </td> 
     <td> @Model.Config[index].property2 </td> 
    </tr> 
index++; 
} 

     } 
    } 
</table> 
0

После сна над ним & пытались несколько раз я, наконец, получил его. Это то, что я искал:

@Html.Label(Model.Config.FirstOrDefault(x => x.ConfigId == "x").Value) 

По какой-то причине, однако, это не будет работать на @ Html.Display. Любая идея почему? Спасибо за все комментарии и предложения.

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