Веб-формы ASP.NET как ASP.NET MVC


2

Прошу прощения за возможный ввод в заблуждение по поводу названия, но я понятия не имею, для правильного названия.

Не стесняйтесь редактировать.

В любом случае, я использую веб-формы ASP.NET, и, возможно, это не то, как предполагается использовать веб-формы, но мне нравится создавать и заполнять элементы HTML вручную. Это дает мне больше контроля.

Я не использую DataBinding и такие вещи. Я использую SqlConnection, SqlCommand и SqlDataReader, задаю строку SQL и т. Д. И читаю данные из DataReader. Старая школа, если хотите. :)

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

Я знаю, что могу визуализировать элемент управления с контролем. RenderControl (writer), но это может быть сделано только в (pre) Render или RenderContents переопределении.

Например.

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

Причина, по которой я делаю это, заключается в том, что я хочу как можно больше отделить кодировку от HTML, чтобы я не делал <% while (dataReader.Read())%> в HTML и отображал данные. Я переместил это в CodeBehind. Я также использую эти функции для рендеринга в HttpHandler для ответа AJAX.

Это работает отлично, но когда я хочу добавить элемент управления (ASP.NET Server control (расширение .cs, а не .ascx)), я не знаю, как это сделать, поэтому я вижу, как функция, которая возвращает строку или другую функцию внутри этого элемента управления, которая возвращает строку и заменяет задание, которое выполняет RenderContents, чтобы я мог вызвать эту функцию, когда мне нужно, чтобы элемент управления был добавлен в другую строку. Я знаю, что это может быть не очень хорошая практика.

Как я вижу все учебники/видеоролики об ASP.NET MVC, я думаю, что он отвечает моим потребностям, как с MVC, вам нужно построить все (или большинство из них) самим собой, что я уже делаю правильно теперь с веб-формами.

После этого длинного ввода я хочу спросить, как я могу создать свои элементы управления, чтобы я мог использовать их, как я упоминал (строка возврата), или я должен забыть о контроле сервера и создавать элементы управления как функции и использовать их таким образом ? Возможно ли это с помощью ASP.NET Server Controls (расширение .cs), или я прав, когда сказал, что я не использую его правильно.

Чтобы быть ясным, я говорю о том, как правильно использовать веб-формы, но чтобы избежать связывания данных, потому что я хочу построить все самостоятельно (визуализировать HTML в Code Behind).
Кто-то может подумать, что я добавляю строки как «некоторые» + «строка», которых я не являюсь. Я использую StringBuilder для этого, поэтому нет медлительности.

Любое мнение приветствуется.

0

@lopkiju, я думаю, что шаблон MVC будет служить вам намного лучше, чем ваше текущее решение WebForms, если вы хотите, чтобы этот контроль над выходным HTML.
Вы можете использовать Web Forms таким образом, как вы уже это сделали, но он не предназначен для использования таким образом, так что это будет боль.

Подробнее

На мой взгляд, прочитал несколько статей о Separation of Concerns (также известный как SoC) принцип. Если вы примените его правильно, он может сэкономить много головных болей при отладке вашего приложения, а также для тех людей, с которыми вы работаете (например, тех, кому, возможно, придется читать или изменять исходный код).

Еще один совет для вас:
Вы правы, что не должны делать такие вещи, как <% while (dataReader.Read()) %> в вашем коде зрения. Но, возможно, есть лучшие способы сделать его более элегантным, чем ваш нынешний путь.

Думаю, вам следует рассмотреть возможность использования своего рода ОРМ для этих целей. (LINQ to SQL или даже NHibernate.) Если вы его получите, это будет намного проще. Так много, что вы можете не захотеть снова использовать DataReader. :-)

Что я рекомендую вам

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

Я уверен, что у вас есть опыт, чтобы сделать это, и после того, как он действительно что-то с этим сделал, вы можете в значительной степени ощутить это.

В учебнике также объясняются и включают принципы, упомянутые выше, которые будут очень полезны для вас.


7

Вам нужно перестать думать с точки зрения «элементов управления» и веб-форм. MVC - это совершенно другой способ построения приложений.

Я также ненавижу автоматические средства визуализации в WebForms, они производят ужасный html, который никогда не имеет никакого смысла. Тем не менее, вы не хотите писать свой html в своем коде и передавать его как строки, это просто противно. Ваш код презентации смешан с вашей логикой, И вы пишете HTML в строки C# !!!

Итак, MVC ... Вместо «виджетов», которые взаимодействуют с кодами и обратными передачами, ваш просмотр ТОЛЬКО отображает данные и содержит формы, позволяющие отправлять сообщения на контроллеры.

Из-за этого вы можете строго ввести свои виды в тип, а затем получить доступ к данным, которые вы передаете ему, с контроллера через свойство модели. Эквивалент UserControls - это частичные представления (ViewUserControl), которые могут использоваться для модуляции вашего кода рендеринга для типов. Например, вы можете сделать частичный адрес, к которому вы передаете свойство адреса своего лица каждый раз, когда вам это нужно. Таким образом, вы не повторяете html повсюду.

P.S. Один файл для всех ваших DAL?

  0

Я говорил о веб-формах. Я думал, что это ясно, но извините за путаницу. Да. DAL находится в одном файле, но я отделяю его на более мелкие части, поскольку он становится больше и меньше обслуживается. Я все еще участвую в n-уровневых приложениях, поэтому мне нужна практика, чтобы понять это правильно. Спасибо за ответ. 22 фев. 092009-02-22 08:57:38


6

Я надеюсь, что я не никогданикогда должны работать на приложение, которое вы писали в этой манере. Если ваше приложение тяжело, тогда что-то не так.

  0

Это не дает ответа на вопрос. Чтобы критиковать или просить разъяснения у автора, оставьте комментарий ниже их сообщения. 09 апр. 152015-04-09 19:09:59

  0

Я ответил: «Если ваше приложение тяжело, тогда что-то не так».Он говорил, что хочет отобразить весь HTML-код в коде, что означает, что вы создаете связку строк и добавляете их в поток Response. Я работал над приложениями, которые делали это или похожими, и они были нелепым беспорядком ... трудно отлаживать, трудно поддерживать, трудно обновлять. Он возвращается к тем временам, когда вам приходилось писать свои собственные библиотеки ISAPI, которые я считаю темным вектором веб-программирования. 09 апр. 152015-04-09 20:48:35


1

Согласитесь с @sliderhouserules, то, как вы используете инфраструктуру MVC, ужасно. Вы должны забыть все свои техники «старой школы». Вы никогда не должны использовать SqlCommands, SqlReaders и т. Д. В коде страниц. Вы должны перейти к виду только модель (например, View (бар)), и это будет лучше, если вы будете избегать использования

ViewData["some magic string"] = bar 

Каждый раз, когда вы будете использовать «старую школу» техник 2 мужчин и 2 кошки быть убитым :).
Также лучше использовать некоторые ORM (объектно-реляционные карты), такие как Linq2sql, NHibernate, SubSonic и т. Д.
Если вам нужны образцы хорошего дизайна приложений, просмотрите SharpArchitecture. Он имеет очень хорошую архитектуру и реализацию и может многое помочь. У этого есть один образец (с Northwind db), и еще один образец будет добавлен в ближайшее время.
Также смотрите на CodeCampServer. У него тоже очень хорошая архитектура.
Лучше смотреть на код этих проектов вместо того, чтобы смотреть видео, потому что существующие видео не могут продемонстрировать хороший образец архитектуры, простое использование функций.
О средствах управления сервером вы можете использовать их, если их можно использовать без «runat =» server », например PlaceHolder. И вы можете создавать их тоже, но вы не должны загружать в них какие-либо данные. Если вы не хотите скопировать-вставить html, вы должны просмотреть свой код, и вы должны его реорганизовать. Каждый дублированный код должен быть перемещен в MasterPages UserControls (ascx ones).
И еще раз, пожалуйста, потратьте немного времени, чтобы посмотреть на эти образцы. Вы сохраните свои нервы и время в будущем, когда вам нужно будет обновить приложение или исправить что-то. При первом взгляде их трудно понять, но это только при первом взгляде. Надеюсь, это поможет.

  0

Я думал, что сделаю путаницу с упоминанием MVC. Все, что я написал, было о веб-формах. Я только что упомянул MVC как лучший инструмент для меня, а затем веб-форм, так как вы должны сами строить свои таблицы. Извините за недоразумение и спасибо за ответ. 22 фев. 092009-02-22 08:48:10

  0

Нет проблем :) И mvc не лучший инструмент, это просто еще один инструмент. Он имеет много преимуществ, но имеет и недостатки. Лучше использовать веб-формы, когда вам нужно быстро создать сайт, и он будет управляться данными (много сеток и т. Д.). Но я предпочитаю MVC, он очень мощный и удобный для меня :) 22 фев. 092009-02-22 09:34:47

  0

Мне нравится идея MVC. Во всяком случае, точкой моего длинного сообщения было правильное использование элементов управления в веб-формах ASP.NET. Я не знаю, как отображать данные, когда func, которые общаются с db, находится в отдельном файле (без DataBinding), так что я сделал это, добавляя строку и вызываю функцию там, где это необходимо. 22 фев. 092009-02-22 10:19:04

  0

это лучший инструмент;) 22 фев. 092009-02-22 10:58:41

  0

Я действительно думаю, что MVC тоже лучше, по крайней мере для меня. Веб-формы работают с автоматической генерацией, которой я не увлекаюсь, но я понимаю, что автоматическое поколение может сэкономить некоторое время, поэтому я думаю о создании собственного автоматического генератора таблиц. :) У меня есть лучший контроль над этим. 22 фев. 092009-02-22 12:28:43


0

Если вы хотите использовать путь ASP.NET MVC, вы можете настроить элементы управления как ASCX, и они просто будут тегами, заполненными контроллером. Тем не менее, это может быть не слишком старая школа.

Вы можете создать свой полный пользовательский интерфейс в коде, если хотите. Это может включать создание HTML в подпрограммах.

Но я бы рекомендовал, если вы придерживаетесь ASP.NET, пересматривая модель привязки по DataReader.Чтение() и выход + цикл. Это не только старый стиль, он очень неэффективен и неспособен поддерживать.

ASP.NET MVC создает намного более легкий ASPX, поскольку это всего лишь представление. И есть гораздо большее разделение кода и пользовательского интерфейса. Но это не будет соответствовать старой модели школы.


0

Рассматривали ли вы использование micro-templates? Дейв Уорд имеет хороший пример из client side data repeater, который использует микро-шаблоны для компоновки после вызова метода страницы. Это звучит так, что это больше в духе того, что вы пытаетесь выполнить, и все еще можно хорошо интегрировать с WebForms.

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