Рекомендации по отображению и разрешению редактирования данных с использованием ASP.NET MVC? - PullRequest
1 голос
/ 14 марта 2010

Я приступаю к своему первому проекту ASP.NET MVC и хотел бы получить некоторую информацию о возможных способах отображения данных базы данных и общих рекомендациях.

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

Name          Age       Position      Date Joined
Jon Smith     23        Striker       18th Mar 2005
John Doe      38        Defender      3rd Jan 1988

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

Мой главный вопрос: какая архитектура / инструменты лучше всего подойдут для выполнения моих требований на высоком уровне?

Из проведенного мною исследования мои первоначальные выводы были такими:

  1. ADO.NET для поиска данных. Это то, что я использовал раньше и чувствовать себя комфортно с. мне нравится выглядит LINQ to SQL, но не хочу сделать кривую обучения любой круче для моего первого выхода в MVC земля только пока.

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

  3. jQuery , чтобы позволить пользователю редактировать данные в таблице, проверка ошибок отредактированные записи данных и т. д.

Кроме того, мое первоначальное мнение заключалось в том, что кэширование данных не будет ключевым требованием здесь. Единственное поле, которое пользователь сможет обновить, - это поле, и, если они это сделают, мне потребуется немедленно зафиксировать эти данные в базе данных, а затем обновить представление (так как данные отсортированы по дате). Есть мысли по этому поводу?

Кроме того, я видел несколько плагинов jQuery, которые эмулируют сетку данных и предоставляют связанную функциональность. Мои первые мысли состоят в том, что мне не нужны все функции, которые поставляются с этими плагинами (например, чередование Zebra, возможность сортировки по столбцам с помощью глифа сортировки в заголовках столбцов и т. Д.), И я не вижу в этом никакой пользы и выше решения, которое я изложил выше. Опять же, есть ли причина пересмотреть эту точку зрения?

Наконец, когда пользователь редактирует дату, мне нужно обновить представление. Чтобы сделать это, я читал о Html.RenderAction, и, похоже, это может быть лучшим вариантом, чем использование частичных представлений, поскольку я могу включить логику приложения в метод действия. Правильно ли я считаю Html.RenderAction или я неправильно понял его использование?

Надеюсь, этот пост понятен и не слишком длинный. Я рассматривал отдельные посты для каждой темы (например, «Частичное представление» против «Html.RenderAction», когда использовать плагин jQuery datagrid), но мне кажется, что эти проблемы настолько переплетены, что их необходимо рассматривать в контексте друг друга.

Спасибо

Ответы [ 3 ]

1 голос
/ 22 марта 2010

Я хотел бы рассмотреть возможность использования jqGrid (плагин сетки jQuery) и реализацию встроенного редактирования. Создайте действия контроллера, которые возвращают необходимые данные в виде JsonResult. Для доступа к слою данных используйте Linq2SQL или Entity Framework.

Дом: http://www.trirand.com/blog/

Демоверсии: http://www.trirand.com/blog/jqgrid/jqgrid.html

1 голос
/ 26 марта 2010

Среда MVC на самом деле не поддерживает один метод доступа к данным по сравнению с другим.Очевидно, что одним из ключевых преимуществ MVC является его улучшенная тестируемость, поэтому имеет смысл структурировать ваш код таким образом, чтобы ваши контроллеры можно было отделить от логики доступа к данным для модульного тестирования.Самый простой способ сделать это - использовать шаблон репозитория, который вы можете реализовать с помощью ADO.NET.

Для визуализации табличных данных вам было бы лучше сделать это с циклом foreach в представлении, а не с использованием частичного,Это может привести к путанице, если есть сложная логика, но это можно исправить с помощью помощников HTML.См. Отличную статью Роба Конери о избегании супа тега , где приведены некоторые указатели на это.

Я думаю, что лучший подход к редактированию строк - это сделать, чтобы каждая строка редактировала запрос AJAX на действие редактирования.так что вам не нужно обновлять все данные.Поскольку MVC легко выполняет привязку параметров действия, это очень легко сделать.Для этого может быть предусмотрено специальное действие, которое отправляет сообщение о состоянии обратно для обратной связи с пользователем.Я бы выбрал для этого вашу собственную функциональность, поскольку это очень легко сделать.

Для обновления всех данных, которые я нашел, самый простой подход - использовать bool?Параметр isPartial в вашем представлении, если он не определен или имеет значение false, вы отображаете полный просмотр, когда он присутствует и имеет значение true, вместо этого вы отображаете частичное представление.Затем вы можете вызвать то же действие, как правило, при первом запросе, а затем отправить через isPartial = true при выполнении запроса AJAX.Затем вы можете использовать jQuery для обновления HTML таблицы как завершенного блока.Это быстрее, чем возвращать JSON и анализировать эту клиентскую сторону.

1 голос
/ 22 марта 2010

Доступ к данным - ADO.NET отлично подходит, если вы к этому привыкли. У меня были отличные результаты, используя Subsonic ActiveRecord и PetaPoco. После установки он избавляет от необходимости заниматься полным доступом к данным без особых затрат на обучение, в отличие от многих других ORM. Они бесплатны для использования, и я определенно рекомендую их.

Таблицы - Частичные представления могут быть полезны, если у вас было очень сложное взаимодействие нескольких наборов данных, которые вы объединяли после извлечения в бизнес-классах. Однако, если вы представляете данные, которые поступают из одной таблицы или даже близки к ее окончательной форме, в качестве результата запроса, нет никаких оснований использовать их для этого. Вместо этого переберите данные с помощью цикла foreach и отформатируйте HTML таким образом.

Сетка-подобная презентация довольно проста.

<% foreach (var row in Model.Rows) {%>
    [HTML for one row]
<%}%>

Это можно сделать даже с помощью таблиц HTML, поскольку вы представляете таблицы данных.

<table>
<% foreach (var row in Model.Rows) {%>
    <tr>
        <td>row.Element1</td>
        <td>row.Element2</td>
        <td>row.Element3</td>
    </tr>
<%}%>
</table>

Внешний вид сетки - Что касается внешнего вида, такого как чередование или раскраска данных, основанных на контенте, включите эти решения в данные модели, которые вы отправляете, и просто используйте классы CSS в своем представлении, чтобы добиться этого , Например, вы можете вернуть значение «нечетное» или «четное» в поле OddEven, которое будет CSS-классами, которые можно стилизовать в таблице стилей.

<table>
<% foreach (var row in Model.Rows) {%>
    <tr class=<%=row.OddEven%>>
        <td>row.Element1</td>
        <td>row.Element2</td>
        <td>row.Element3</td>
    </tr>
<%}%>
</table>

Сортировка - Что касается тяжелого jQuery или javascript для сортировки и манипулирования данными, я подожду, пока возникнет некоторая известная проблема с производительностью, прежде чем беспокоиться о перезагрузке данных все время. Однако, если вы перезагружаете данные каждый раз, вы можете столкнуться с проблемами, когда данные в сетке постоянно обновляются, и ваш пользователь обнаружит, что он теряет позицию курсора или прерывается во время редактирования или что изменения вызывают события при неполном редактировании, которое заканчивается вверх в базе данных.

Хотя кажется, что сетка данных находится в порядке дат, и кто-то меняет дату, самое важное - немедленно прибегнуть к данным. Я не претендую на то, что знаю вашу ситуацию, но после многих лет работы я обнаружил, что просто позволить пользователю выполнить свою работу (например, пропустив обращение), часто важнее перестановка строк, что часто означает данные, которые пытались редактировать, переместились в другое место, и они должны найти их снова.

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

Взаимодействие с клиентом - Если в вашем приложении много пользователей и много правок, большие наборы данных могут привести к большому трафику, если вы обновляете данные при каждом редактировании. Однако, если это собственное приложение с ограниченным количеством пользователей или ограниченной активностью, это, конечно, не проблема. Использование jQuery для редактирования данных работает довольно хорошо - вы можете добавлять вызовы для сохранения данных в том виде, в каком они были отредактированы, и это может придать приложению удобство, которого не хватало в более традиционных веб-приложениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...