Отображение стандартного DataTables в MVC

Возможно, это просто абсолютно неправильно, но назад в эпоху Веб-форм Вы возвратили бы Набор данных, который Вы затем свяжете с сеткой. Но теперь в MVC Вы, как предполагается, не передаете таблицу данных, потому что Вы не можете сериализировать его, и он технически передает объекты в Представление, где он не принадлежит? Но как же я предназначен для отображения данных по представлению?! Я не могу использовать LINQ для классов SQL здесь, так как это - чистое в структуре данных оперативной памяти.

Идеально я был бы точно так же, как к способному, чтобы иметь объект, которого я могу выполнить итерации в рамках представления.

Я действительно в чем-то вроде потери, я прочитал статью от "Gu", и я могу только суммировать это, я должен пасовать назад Объект ViewData вместо этого?? Я схожу с ума здесь?

Аплодисменты из Англии

Jon

43
задан Sorangwala Abbasali 12 December 2016 в 09:23
поделиться

1 ответ

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

Динамические библиотеки связываются во время выполнения - программа со ссылками на динамическую библиотеку загружается и связывается с библиотекой при ее запуске (или по запросу).

Перемещаемая библиотека - это еще одно слово для динамической библиотеки. При связывании с динамической библиотекой вычисляются адреса функций, содержащихся в ней, в зависимости от места загрузки библиотеки в память. Они являются "перемещаемыми", поскольку адреса содержащихся функций не определяются во время соединения. (В статической библиотеке адреса вычисляются в течение времени соединения.)

Файл объекта (.o) содержит скомпилированный код, но не содержит окончательных адресов всех функций. Связывание - это процесс, в котором компоновщик проходит через все объектные файлы и вычисляет правильный адрес для каждой вызываемой функции.

-121--4213363-

Это совсем не "неправильно", это просто не то, что крутые парни обычно делают с MVC. В качестве отступления, я хотел бы, чтобы некоторые из ранних демозаписей ASP.NET MVC не пытались запятнать в Linq-to-Sql одновременно. Это довольно потрясающе и хорошо подходит для MVC, конечно, но это не обязательно. MVC ничего не мешает использовать ADO.NET . Например:

действие Диспетчера:

public ActionResult Index()
{
    ViewData["Message"] = "Welcome to ASP.NET MVC!";

    DataTable dt = new DataTable("MyTable");
    dt.Columns.Add(new DataColumn("Col1", typeof(string)));
    dt.Columns.Add(new DataColumn("Col2", typeof(string)));
    dt.Columns.Add(new DataColumn("Col3", typeof(string)));

    for (int i = 0; i < 3; i++)
    {
        DataRow row = dt.NewRow();
        row["Col1"] = "col 1, row " + i;
        row["Col2"] = "col 2, row " + i;
        row["Col3"] = "col 3, row " + i;
        dt.Rows.Add(row);
    }

    return View(dt); //passing the DataTable as my Model
}

Представление: (w/Модель, сильно напечатанная как Система. Данные. DataTable)

<table border="1">
    <thead>
        <tr>
            <%foreach (System.Data.DataColumn col in Model.Columns) { %>
                <th><%=col.Caption %></th>
            <%} %>
        </tr>
    </thead>
    <tbody>
    <% foreach(System.Data.DataRow row in Model.Rows) { %>
        <tr>
            <% foreach (var cell in row.ItemArray) {%>
                <td><%=cell.ToString() %></td>
            <%} %>
        </tr>
    <%} %>         
    </tbody>
</table>

Теперь, я нарушаю много принципов и «лучшие практики» ASP.NET MVC здесь, поэтому, пожалуйста, поймите, что это - просто простая демонстрация. Код, создающий DataTable, должен находиться где-то за пределами контроллера, и код в представлении может быть лучше изолирован от частичного или HTML-помощника, чтобы назвать несколько способов, которыми должны делать вещи.

Вы абсолютно обязаны передавать объекты в вид , если вид должен их представлять. (Разделение проблем диктует, что точка зрения не должна нести ответственность за их создание .) В этом случае я передал DataTable как фактическое представление Model, но вы могли бы также поместить его в коллекцию ViewData. Можно также создать определенный класс IndexViewModel, содержащий DataTable и другие объекты, например приветственное сообщение.

Надеюсь, это поможет!

69
ответ дан 26 November 2019 в 22:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: