Лучшая практика для циклического просмотра данных в БД и отображения в Asp.net 4.0 без веб-форм! - PullRequest
0 голосов
/ 23 июля 2011

Предполагая, что данные были извлечены из БД и помещены в объект people.

foreach (People p in people)
{
    // create an html button for each p

     PlaceHolder1.Controls.Add("control");
}

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

РЕДАКТИРОВАТЬ: Я хотел бы использовать Webform, но не для создания динамического контента. Например, если вы создали систему CRUD с динамическими элементами управления для БД, сложность поддержания синхронизации создания и удаления в БД с действиями в жизненном цикле страницы довольно велика. Для всего остального статического контента веб-формы на самом деле довольно приличные.

Итак, чтобы напомнить, что решение, которое я ищу, на самом деле существует на странице веб-форм, однако цикл не будет создавать динамические элементы управления веб-формы, а скорее стандартные элементы управления HTML.

Ответы [ 4 ]

3 голосов
/ 23 июля 2011

Вы бы передали коллекцию на просмотр.Затем выполните итерацию по каждому элементу в коллекции и добавьте туда HTML-код.

1 голос
/ 23 июля 2011

Если это сайт MVC (и поскольку вы упомянули не WebForms, я предполагаю, что это так), вы ДЕЙСТВИТЕЛЬНО хотите сделать это на ваш взгляд. Это легко и правильно сделать там. Выполнение этого в контроллере означает, что для его вывода вам придется переопределить результат и вернуть результаты, а не то, что в представлении, что не является подходящим способом.

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

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

0 голосов
/ 23 июля 2011

Если вы предпочитаете, чтобы у вас не было ни MVC View, ни традиционной ASP.NET WebForm, вы можете создать обработчик http, чтобы выкладывать результаты прямо в браузер

 <!-- Register you're handler web.config -->
 <system.web>
 ...
     <httpHandlers>
         <add verb="*" path="People.axd" type="YourLibNameSpace, PeopleHandlerFactory" />
     </httpHandlers>
 ...
 </system.web>

 public class PeopleHandlerFactory: IHttpHandlerFactory
 {
      public virtual IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated)
    {

         Page p = new Page();
        p.SetRenderMethodDelegate(delegate (HtmlTextWriter writer) 
            {
                // ... some standard html tags if so desired
                foreach (var person in People)
                {
                    writer.Write(person.ToString());
                }
            });
         return p;
    }
 }

Но если вы используете представления MVC, ваш контроллер будет настроен следующим образом

public class PeopleController : Controller
{
    public ActionResult Index()
    {
        var people = Repository.GetPeople();
        return View(people);
    }
 ....
 }

Ваш вид (Razor .cshtml) будет выглядеть примерно так:

www.site.com/people/

@model IEnumerable<People>
@foreach (var person in Model)
{
    @person.Name
}
0 голосов
/ 23 июля 2011

Если у вас есть что-то действительно особенное, что по какой-то причине вы не можете использовать Views (вы сказали, что не webforms и не MVC?), Тогда у меня есть только проект для вас. Я создал небольшой проект с именем EView для очень простой визуализации HTML (или чего-либо еще) в виде упрощенного представления во время компиляции. Я признаю, что документация немного устарела, но большая часть того, что устарело, это просто добавленные функции. Это BSD по лицензии.

Пример:

Шаблоны / SomeView.html:

{@ Title as string; @}
<html><head>
<title>{=Title=}</title>
<body>
Hey check out the dynamic title
</body>
</html>

SomeCode.cs:

var view=new SomeView();
view.Title="Some View Title";
response.Write(view.EViewRender()); //render returns a string
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...