Почему бы просто не создать представление, которое специализируется на построении таблицы с учетом конкретной модели, которая включает всю информацию о столбцах и строках?Таким образом, вы можете использовать вид в любом месте, и модель, которую вы дадите, будет определять количество столбцов и строк.
Редактировать
Не думаю, что вы достаточнопонимая мою точку зрения, поэтому я буду использовать некоторый код.Сейчас у вас, вероятно, есть модель, которая выглядит примерно так:
public class Something
{
public string ValueA {get;set;}
public string ValueB {get;set;}
public string ValueC {get;set;}
}
И ваш взгляд, вероятно, выглядит примерно так:
<table><tr><th>Column A</th><th>Column B</th><th>Column C</th></tr>
<%foreach(var something in Model.Somethings) {%>
<tr>
<td><%:something.ValueA%></td>
<td><%:something.ValueB%></td>
<td><%:something.ValueA%></td>
</tr>
<%}%>
</table>
Ну, как вы заметили, это не такХорошо поддается просто столбцам из таблицы.Одним из решений было бы установить некоторые параметры в модуле, чтобы определить, какие столбцы будут включены, и затем добавить в ваш набор кучу операторов if/then
.Но я думаю, что лучшим решением было бы создать новый класс Model, который будет выглядеть примерно так:
public class TableModel
{
public IEnumerable<string> Headers {get;set;}
public IEnumerable<IEnumerable<string>> Rows {get;set;}
}
Тогда ваша модель будет выглядеть примерно так:
<table><tr>
<%foreach(var header in Model.Headers) {%>
<th><%:header%></th>
<%}%></tr>
<%foreach(var row in Model.Rows) {%>
<tr>
<%foreach(var cell in row) {%>
<td><%:cell%></td>
<%}%>
</tr>
<%}%>
</table>
Как вы можете видетьВ этом коде представления нет ничего, что явно связывало бы вас с вашим исходным типом данных, поэтому его можно использовать повторно для любой таблицы, которую вы хотите создать во всем приложении.Ваш контроллер становится ответственным за создание объекта TableModel из данных, которые вы хотите представить.Если в эту модель будет включен определенный столбец, он будет отображен.Если нет, то не будет.
Очевидно, что, как и в вашем примере, это чрезвычайно упрощено, но оно должно дать вам общее представление.Класс DataTable
, который уже является частью .NET, может уже иметь все необходимое, поэтому вам даже не придется создавать свой собственный класс TableModel
.У него уже есть приятная функциональность, связанная с добавлением и удалением столбцов, строк и т. Д.